Rudgar: SOAP-Webservice (IIS) mit PHP (Apache) aber ohne(!) WSDL nutzen

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