Ahoy!
Ich kämpfe mit einem vielleicht akademisch anmutenden Problem, wüßte aber trotzdem gerne eine Lösung und komme einfach nicht weiter.
Situtation:
- ein Server, auf dem ein IIS als Webserver "schnarchhahn" läuft.
- auf diesem Rechner eine DLL, die über das SOAP-Toolkit als Webservice verfügbar gemacht wurde.
- Zu diesem Webservice gibt es eine WSDL (s.u.)
- ein zweiter Server mit Apache als Webserver "obelix" läuft.
- ein PHP-Skriptauf "obelix", das den Webservice auf "schnarchhahn" über SOAP nutzen soll.
Das klappt soweit problemlos, wenn ich die WSDL (s.u.) nutze:
<?php
$client = new SoapClient( 'http://schnarchhahn/SoapServices/Try/wsTry.wsdl', array('exceptions' => 0, 'cache_wsdl'=>WSDL_CACHE_NONE) );
$result = $client->ReturnLong($_POST['var0'])
?>
Und nun der Haken an der Sache: obwohl es eine WSDL-Datei gibt, soll der Service auch direkt und ohne Verwendung der WSDL-Datei genutzt werden können. Mein bisheriger Versuch fliegt auf die Schnauze:
<?php
$client = new SoapClient( NULL,
array (
"location" => $strAdr['asp'],
"uri" => "http://schnarchhahn/SoapServices/Try/message/",
"style" => SOAP_RPC,
"use" => SOAP_ENCODED,
'exceptions' => 0
)
);
$parameters = array (
new SoapParam($_POST['var0'], 'pi_lLong')
);
$result = $client->__call ( "ReturnLong",
array("parameters" => $parameters),
array (
"uri" => "http://schnarchhahn/SoapServices/Try/message/",
"soapaction" => "http://schnarchhahn/SoapServices/Try/action/clsWS.Init"
)
);
?>
Antwort des SOAP-Servers auf "schnarchhahn":
"WSDLReader:None of the matching operations for soapAction http://schnarchhahn/SoapServices/Try/action/clsWS.Init could successfully load the incoming request. Potential typemapper problem"
Wo vergesse/übersehe ich was?
Oder wo hakt es bei mir am generellen Verständnis?
Mir ist nämlich auch irgendwie nicht so ganz klar, was diese Option-Arrays beim Erzeugen des Clients und beim Call selbst so alles zu sagen haben :(
Kann / mag mir bitte jemand einen Tipp geben?
Herzlichen Dank im Voraus!
Hier der Vollständigkeit halber die WSDL-Datei:
<!-- Generated 12/10/08 by Microsoft SOAP Toolkit WSDL File Generator, Version 3.00.1325.0 -->
<definitions
name='wsTry'
targetNamespace='http://schnarchhahn/SoapServices/Try/wsdl/'
xmlns:wsdlns='http://schnarchhahn/SoapServices/Try/wsdl/'
xmlns:typens='http://schnarchhahn/SoapServices/Try/type/'
xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:stk='http://schemas.microsoft.com/soap-toolkit/wsdl-extension'
xmlns:dime='http://schemas.xmlsoap.org/ws/2002/04/dime/wsdl/'
xmlns:ref='http://schemas.xmlsoap.org/ws/2002/04/reference/'
xmlns:content='http://schemas.xmlsoap.org/ws/2002/04/content-type/'
xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
xmlns='http://schemas.xmlsoap.org/wsdl/'>
<types>
<schema
targetNamespace='http://schnarchhahn/SoapServices/Try/type/'
xmlns='http://www.w3.org/2001/XMLSchema'
xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/'
xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
elementFormDefault='qualified'>
<import namespace='http://schemas.xmlsoap.org/soap/encoding/'/>
<import namespace='http://schemas.xmlsoap.org/wsdl/'/>
<import namespace='http://schemas.xmlsoap.org/ws/2002/04/reference/'/>
<import namespace='http://schemas.xmlsoap.org/ws/2002/04/content-type/'/>
</schema>
</types>
<message name='clsWS.ReturnLong'>
<part name='pi_lLong' type='xsd:int'/>
</message>
<message name='clsWS.ReturnLongResponse'>
<part name='Result' type='xsd:int'/>
</message>
<portType name='clsWSSoapPort'>
<operation name='ReturnLong' parameterOrder='pi_lLong'>
<input message='wsdlns:clsWS.ReturnLong'/>
<output message='wsdlns:clsWS.ReturnLongResponse'/>
</operation>
</portType>
<binding name='clsWSSoapBinding' type='wsdlns:clsWSSoapPort' >
<stk:binding preferredEncoding='UTF-8'/>
<soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
<operation name='ReturnLong'>
<soap:operation soapAction='http://schnarchhahn/SoapServices/Try/action/clsWS.ReturnLong'/>
<input>
<soap:body
use='encoded'
namespace='http://schnarchhahn/SoapServices/Try/message/'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'
parts='pi_lLong'/>
</input>
<output>
<soap:body
use='encoded'
namespace='http://schnarchhahn/SoapServices/Try/message/'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'
parts='Result'/>
</output>
</operation>
</binding>
<service name='wsTry' >
<port name='clsWSSoapPort' binding='wsdlns:clsWSSoapBinding' >
<soap:address location='http://schnarchhahn/SoapServices/Try/wsTry.ASP'/>
</port>
</service>
</definitions>
Gruß, Ich