Announcement

Collapse
No announcement yet.

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

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

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

    Ahoy!

    Ich kämpfe mit einem vielleicht seltsam anmutenden Problem, brauche aber trotzdem 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 Code:
    <?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 Code:
    <?php
      $client 
    = new SoapClientNULL,
                                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:
    Code:
    <!-- 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
Working...
X