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,