![]() |
HILFE! SOAP-Client für document literal Webservice!?
Hallo, vielleicht könnt ihr mir ja noch helfen? Bin langsam ratlos...
Ich probier gerade einen SOAP-Client für einen Webservice hinzukriegen der mit document/literal Encoding arbeitet. Der Webservice hat nur eine einzige Funktion der man ein WideString (XML) übergeben kann und die mir auch wieder einen WideString (XML) zurückliefert. Die Webservice Client Unit hab ich durch den WSDLImport generiert (WSDL und generierte Unit siehe unten). Ich arbeite mit Delphi 7 und weiß dass man für document/literal Support einen ![]() Folgende Exception beim aufrufen der Funktion:
Delphi-Quellcode:
Was soviel bedeutet ich krieg den HTML(!)-Text der WebService-URL zurück als wenn man sie im Browser aufrufen würde plus (ich vermute mal) irgendein Parser-Fehler.
End tag 'body' does not match the start tag 'HR'.
Linie: 1 <html><head><title>Apache Tomcat/5.5.15 Von rpc/encoded bin ich gewöhnt NICHTS an der generierten Unit anfassen zu müssen und es funktioniert. Es erscheint mir alledings schon komisch dass nirgends in der Unit auf document/literal eingegangen wird. Deswegen habe ich selber mal probiert durch verschiedenste Kombinationen von
Delphi-Quellcode:
oder
initialization
InvRegistry.RegisterInvokeOptions(TypeInfo(SoapPort), ioLiteral); und/oder InvRegistry.RegisterInvokeOptions(TypeInfo(SoapPort), ioDocument);
Delphi-Quellcode:
irgendwas zu bewegen.
RIO.Converter.Options := RIO.Converter.Options + [SoDocument];
und/oder RIO.Converter.Options := RIO.Converter.Options + [soLiteralParams]; Hat leider alles nicht geklappt. Was mach ich falsch? :( die wsdl schaut folgendermaßen aus: Kann bitte jemand mit D2007 das für mich importieren und schauen ob das gleiche rauskommt?
Delphi-Quellcode:
die generierte unit:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://blabla.org/SendMessageImpl/SendMessageImpl/xyz/query2__async2" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://blabla.org/SendMessageImpl/SendMessageImpl/xyz/query2__async2"> <wsdl:types/> <wsdl:service name="ContractSqlSoap"> <wsdl:port name="SOAPEventSource" binding="tns:SOAPEventSourceBinding"> <soap:address location="https://url:12345/abc/ContractService"/> </wsdl:port> </wsdl:service> <wsdl:portType name="SoapPort"> <wsdl:operation name="SendMessage"> <wsdl:input message="tns:SendMessage"/> <wsdl:output message="tns:SendMessageResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="SOAPEventSourceBinding" type="tns:SoapPort"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="SendMessage"> <soap:operation style="document" soapAction="/abc/ContractService" soapActionRequired="true"/> <wsdl:input> <soap:body use="literal" parts="XMLInput"/> </wsdl:input> <wsdl:output> <soap:body use="literal" parts="Result"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:message name="SendMessage"> <wsdl:part name="XMLInput" type="xs:string"/> </wsdl:message> <wsdl:message name="SendMessageResponse"> <wsdl:part name="Result" type="xs:string"/> </wsdl:message> </wsdl:definitions>
Delphi-Quellcode:
// ************************************************************************ //
// Die in dieser Datei deklarierten Typen wurden aus Daten generiert, die aus // unten beschriebener WSDL-Datei stammen: // WSDL : W:\abc\meine.wsdl // Codierung : UTF-8 // Version : 1.0 // (26.10.2007 14:49:12 - 1.33.2.5) // ************************************************************************ // unit meine; interface uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns; type // ************************************************************************ // // Die folgenden Typen, auf die im WSDL-Dokument Bezug genommen wird, sind in dieser Datei // nicht repräsentiert. Sie sind entweder Aliase(@) anderer repräsentierter Typen oder auf sie wurde Bezug genommen, // aber in diesem Dokument nicht deklariert (!). Die Typen aus letzterer Kategorie // sind normalerweise mit vordefinierten/bekannten XML- oder Borland-Typen verbunden; sie könnten aber auch ein Anzeichen // für ein falsches WSDL-Dokument sein, das einen Schema-Typ nicht deklariert oder importiert.. // ************************************************************************ // // !:string - "http://www.w3.org/2001/XMLSchema" // ************************************************************************ // // Namespace : [url]http://blabla.org/SendMessageImpl/SendMessageImpl/xyz/query2__async2[/url] // Bindung : SOAPEventSourceBinding // Service : ContractSqlSoap // Port : SOAPEventSource // ************************************************************************ // SoapPort = interface(IInvokable) ['{D5E57539-5BA3-BF46-0EEF-979D83C3A6CE}'] function SendMessage(const XMLInput: WideString): WideString; stdcall; end; function GetSoapPort(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): SoapPort; implementation function GetSoapPort(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): SoapPort; const defWSDL = 'W:\abc\meine.wsdl'; defURL = ''; defSvc = 'ContractSqlSoap'; defPrt = 'SOAPEventSource'; var RIO: THTTPRIO; begin Result := nil; if (Addr = '') then begin if UseWSDL then Addr := defWSDL else Addr := defURL; end; if HTTPRIO = nil then RIO := THTTPRIO.Create(nil) else RIO := HTTPRIO; try Result := (RIO as SoapPort); if UseWSDL then begin RIO.WSDLLocation := Addr; RIO.Service := defSvc; RIO.Port := defPrt; end else RIO.URL := Addr; finally if (Result = nil) and (HTTPRIO = nil) then RIO.Free; end; end; initialization InvRegistry.RegisterInterface(TypeInfo(SoapPort), 'http://blabla.org/SendMessageImpl/SendMessageImpl/xyz/query2__async2', 'UTF-8'); InvRegistry.RegisterDefaultSOAPAction(TypeInfo(SoapPort), ''); end. |
Re: HILFE! SOAP-Client für document literal Webservice!?
hat keiner ne Idee?
|
AW: HILFE! SOAP-Client für document literal Webservice!?
Hallo
Ich stehe heute exakt vor dem gleichen Problem. Hast du damals eine Lösung gefunden ? LG |
AW: HILFE! SOAP-Client für document literal Webservice!?
Zitat:
![]()
Delphi-Quellcode:
in
soLiteralParams
Delphi-Quellcode:
zu setzen, dann verwendet der Delphi SOAP Client den Document/Literal/Wrapped Standard.
THttpRio.Converter.Options
"Notfalls" kann man auch das Free Pascal Web Services Toolkit einsetzen, es ist Delphi kompatibel und diese Tage in Version 0.6 erschienen. |
AW: HILFE! SOAP-Client für document literal Webservice!?
Würde der Funktionsaufruf den mit D2007 funktionieren?
AFAIK waren die uralten Delphi Implementierung (D6/7) alles andere als ein Quell von Kompatibilität. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz