Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Webservice-Client: Parameter werden nicht übergeben

  Alt 10. Jan 2010, 12:14
Zitat von TheJeed:
Nun, wo ich mit dem Delphi-clientseitigen Aufruf aber die beiden Strings übergeben möchte, kommen diese aber nicht an, sondern nur 2x'null'.
Ja, Delphi läßt einen im SOAP Bereich oft im Dunkeln

Ich habe einen Service mit NetBeans 6.8 geschrieben und den Client in Delphi 2009, und kann das Problem auch schon für den einfachsten Fall (kein komplexes Objekt als Rückgabe) nachvollziehen.

Der SoapTester in NetBeans zeigt diesen korrekt funktionierenden SOAP Request:

Delphi-Quellcode:
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Header/>
    <S:Body>
        <ns2:login xmlns:ns2="http://betabeans.de/">
            <login>a</login>
            <pwd>b</pwd>
        </ns2:login>
    </S:Body>
</S:Envelope>
Delphi sendet etwas anderes:
Delphi-Quellcode:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <SOAP-ENV:Body>
    <login xmlns="http://betabeans.de/">
      <login>a</login>
      <pwd>b</pwd>
    </login>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Nach Korrektur (siehe unten) funktioniert es in Delphi:
Delphi-Quellcode:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <NS1:login xmlns:NS1="http://betabeans.de/">
      <login xsi:type="xsd:string">a</login>
      <pwd xsi:type="xsd:string">b</pwd>
    </NS1:login>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Ich musste dazu nur

InvRegistry.RegisterInvokeOptions(TypeInfo(NewWebService), ioDocument); ändern in

InvRegistry.RegisterInvokeOptions(TypeInfo(NewWebService), ioDefault);
Cheers,
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat