Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi WSDL - Benutzen des soap:header Attributes für Sessions (https://www.delphipraxis.net/25252-wsdl-benutzen-des-soap-header-attributes-fuer-sessions.html)

jwilhelm 3. Jul 2004 15:45


WSDL - Benutzen des soap:header Attributes für Sessions
 
Hallo,

ich versuche momentan einen Webservice Client mit Delphi 7 zu erstellen. Hierfür lese ich folgende WSDL Datei mit dem WSDL Importer ein um die Proxy Klassen zu erstellen.

XML-Code:
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://tempuri.org/" name="BusinessBeanService">
   <message name="methodHeader">
      <part name="SID" type="xs:string"/>
   </message>
   <message name="loginRequest">
      <part name="TimeStamp" type="xs:dateTime"/>
      <part name="UserName" type="xs:string"/>
      <part name="Password" type="xs:string"/>
   </message>
   <message name="loginResponse">
      <part name="SessionID" type="xs:string"/>
   </message>
         <portType name="BusinessBean">
      <operation name="login">
         <input message="tns:loginRequest"/>
         <output message="tns:loginResponse"/>
      </operation>
         </portType>

   <binding name="BusinessBeanbinding" type="tns:BusinessBean">
      <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
      <operation name="login">
         <soap:operation soapAction="urn:BusinessBean#login" style="document"/>
         <input>
            <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:BusinessBean"/>
            <soap:header message="tns:loginRequest" part="header" use="literal"/>
         </input>
         <output>
            <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:BusinessBean"/>
            <soap:header message="tns:loginResponse" part="header" use="literal"/>
         </output>
      </operation>

         </binding>
   <service name="BusinessBeanservice">
      <port name="BusinessBeanPort" binding="tns:BusinessBeanbinding">
         <soap:address location="http://..."/>
      </port>
   </service>
Ich Benutze innerhalb des Bindings das soap:header Element um einen Timestamp, ein Username und ein Passwort im SOAP Header zu versenden. Die SOAP Nachricht, die allerdings durch die Proxy Klassen generiert wird, enthält sämtliche Daten im Body der Nachricht und nicht im Header.

Kann mir irgend jemand erklären was an der WSDL Beschreibung falsch ist?

Ich hoffe ich habe das Thema im richtigen Thread gepostet. Ich denke WSDL passt am besten zum Thema XML.

Vielen Dank im vorraus.

Gruss Jürgen

jwilhelm 7. Jul 2004 09:10

Re: WSDL - Benutzen des soap:header Attributes für Sessions
 
Hi,

habs inzwischen selbst rausgefunden. :lol:

Wen es interessiert:

Die WDSL Beschreibung ist korrekt. Der Header muss in Delphi allerdings separat versendet werden.
Hierfür castet man eine Instanz des IInvokable Interface, welches Delphi durch die WSDL erstellt hat, als ISOAPHeaders und führt darauf die Methode Send(TSoapHeader) aus.

:wall:

Gruss Jürgen

fisipjm 30. Sep 2019 16:22

AW: WSDL - Benutzen des soap:header Attributes für Sessions
 
Hi Jürgen,

ich weis dein Post ist schon ein gutes Stückchen her :lol: aber Probleme werden ja bekanntlich nicht älter man gewöhnt sich nur dran....

Ich stehe aktuell exakt vor dem gleichen Problem. Habe eine WSDL die ich, wenn ich Sie importiert habe, mit die entsprechenden Klassen liefert.
In der Klasse gibt es ein Login mit Benutzer, Passwort und Mandant, worauf ich als Antwort eine UUID "xsd:String" im Header als Session vom Server bekomme.
Nach Ende des Aufrufs muss ein Release erfolgen, leider schmeist mir der Server da die Fehlermeldung UUID nicht übergeben und wenn ich den Wireshark anwerfe, dann stimmt das auch, Mein aufruf erzeugt kein Header Bereich. Hast du zufällig einen kleinen Codeschnippsel deiner damaligen Lösung übrig?

Gruß
PJM

Bernhard Geyer 30. Sep 2019 16:46

AW: WSDL - Benutzen des soap:header Attributes für Sessions
 
Die Implementierung von neuen Delphi-Versionen hat auch nichts mehr mit der Implementierung von alten Versionen zu tun.
Also am besten neue Beitrag erstellen und WICHTIG die Delphi-Version angeben.
Da es eine (kostenlose) Community-Edition gibt, am besten das damit auch mal prüfen, ob das Problem immer noch vorhanden ist.


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf