![]() |
WebService: ISAPI-DLL liefert verschiedene XML-Strukturen
Moin moin,
wir haben hier ein sehr merkwürdiges Problem auf einem Produktionssystem. Die ansonsten so gut funktionierende Erstellung von WebServices mit Delphi scheint in unserer Umgebung zu Problemen zu führen. Die Umgebung:
Ein und dieselbe DLL führt auf ein und demselben System zu verschiedenen XML-Response-Dokumenten. Die Unterschiede liegen in der Referenzierung "geschachtelter" Klassen. Beide Varianten treten scheinbar wahllos auf und sind nicht abhängig vom Konsumenten des Webservice. Angenommen, es gibt einen Typ TKreis, der einen Typen TFarbe wie folgt referenziert:
Delphi-Quellcode:
Die von der Webservice-DLL gelieferten XML-Dokumente stellen die Verweise nun auf zwei Arten dar (vereinfachte Darstellung):
TKreis = class(TObject)
private FFarbe: TFarbe; published Farbe: TFarbe read FFarbe write FFarbe; end; TFarbe = class(TObject) private FHex: String; published Hex: String read FHex write FHex; end; Variante "OUTLINE" (TFarbe-Knoten separat):
XML-Code:
Variante "INLINE" (TFarbe-Knoten 'inline' im TKreis-Knoten):
<SOAP-ENV:Body>
<TKreis> <return href="#1"> </TKreis> <TFarbe id="1"> <String>FFFFFF</String> </TFarbe> </SOAP-ENV:Body>
XML-Code:
Grundsätzlich stellt sich mir die Frage, wie es bei konstantem Client, gleichförmigen SOAP-Calls, konstantem Rechner und identischer DLL zu unteschiedlichen Response-Strukturen kommen kann. Hat jemand eine Idee?
<SOAP-ENV:Body>
<TKreis> <TFarbe> <String>FFFFFF</String> </TFarbe> <return href="#1" /> </TKreis> </SOAP-ENV:Body> Wenn man die beiden Varianten einmal genauer in Augenschein nimmt, sieht man, daß der return-Knoten unterschiedlich funktioniert: bei "OUTLINE" wird auf einen noch folgenden Knoten nach vorne verwiesen, bei "INLINE" erfolgt der Verweis rückwärts - und noch dazu auf einen Knoten, der ohnehin schon ein Kindknoten ist. Die OUTLINE-Variante mit dem Vorwärtsverweis ist IMHO kompatibel zu SOAP 1.2, die INLINE-Variante hingegen nicht. Genau dieses Verhalten führt hier gerade zu Probleme, da ein Java-Client angebunden werden soll, der Libraries verwenden, die sich strikt an SOAP 1.2 orientieren Über jeden Hinweis freue ich mich. Meine Fragen sind:
Vielen Dank im Voraus für die Unterstützung malte. |
Re: WebService: ISAPI-DLL liefert verschiedene XML-Strukture
Moin,
in der Quality Central sind wir fündig geworden: ![]() TSOAPDomConv.Options in the SOAP-WebModul: [soTryAllSchema, soRootRefNodesToBody, soUTF8InHeader, soUTF8EncodeXML] zu beachten. "soRootRefNodesToBody" sorgt dafür, daß eien SOAP 1.2 kompatibles Response-Format, das nur Vorwärts-Verweise enthält, erstellt wird. Das erklärt zwar noch nicht, warum das Response-Format _unterschiedlich_ war. Wir haben uns das mittlerweile damit begründet, daß die Option nicht initialisiert wird, wenn auf false gesetzt und der Server zufällige Werte in den Speicherbereichen hat. malte. |
Re: WebService: ISAPI-DLL liefert verschiedene XML-Strukture
Hallo malte,
vielen Dank für die Auflösung des Rätsels. Hoffentlich erinnere ich mich zu gegebener Zeit an dieses Detail. Deine Problembeschreibung war übrigens sehr professionell. Ich hoffe bald wieder etwas von dir zu lesen. Freundliche Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 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