Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   SOAP Webservice in Delphi? (https://www.delphipraxis.net/194665-soap-webservice-delphi.html)

Elrond 19. Dez 2017 13:08

Delphi-Version: 10 Berlin

SOAP Webservice in Delphi?
 
Hallo Zusammen,

ich versuche mich aktuell an der Implementierung eines SOAP Clients in Delphi.

Die wenige offizielle Hilfe von Embarcadero lässt bereits schlimmes vermuten, aber ich bin noch optimistisch das ich einfach die ganze tolle Magie in Delphi noch nicht gefunden habe.

Wie in der Delphi Hilfe steht, habe ich die benötigte WSDL Importiert und die erste Anfrage abgesendet, scheint ja genauso einfach zu sein wie in Java. Leider hat es nicht ansatzweise Funktioniert, die komplette Policy Deklaration der WSDL wurde ignoriert. Weder kam ein Fehler das eine Signatur nicht möglich ist, noch wurde der geforderte Timestamp oder Empfänger hinzugefügt, es war eine einfache nackte Anfrage.

Auf Anhieb habe ich auch keine vorgesehene Möglichkeit gefunden um die benötigten Punkte auszukonfigurieren. Es gibt nur die Basisklasse TSOAPHeader, keine einzige Ableitung davon. Es kann aber doch nicht sein das ich mich jetzt selber darum kümmern muss.

Sherlock 19. Dez 2017 14:29

AW: SOAP Webservice in Delphi?
 
Ich hatte bisher keine Probleme mit Delphi als SOAP Client. Welche konkrete Fehlermeldung bekommst Du? Oder was genau geht nicht?

Sherlock

Elrond 19. Dez 2017 14:46

AW: SOAP Webservice in Delphi?
 
Zitat:

Zitat von Sherlock (Beitrag 1389276)
Ich hatte bisher keine Probleme mit Delphi als SOAP Client. Welche konkrete Fehlermeldung bekommst Du? Oder was genau geht nicht?

Sherlock

Es fehlen alle geforderten SOAP Header. Im Detail fordert die WSDL ws-addressing und zum Teil darauf aufbauend ws-security für die Signatur über den Timestamp- und Empfängerknoten.

hoika 19. Dez 2017 15:01

AW: SOAP Webservice in Delphi?
 
Hallo,
zeig uns doch mal die WSDL, Delphi hat in der Tat bei komplizierteren Strukturen Importprobleme.

Elrond 19. Dez 2017 15:21

AW: SOAP Webservice in Delphi?
 
Zitat:

Zitat von hoika (Beitrag 1389280)
Hallo,
zeig uns doch mal die WSDL, Delphi hat in der Tat bei komplizierteren Strukturen Importprobleme.

Ich kann euch gerne die WSDL zur Verfügung stellen, jedoch denke ich, dass das Problem nichts mit der direkten WSDL zu tun hat.


Es geht um diesen allgemeinen Abschnitt der die Sicherheitsanforderungen des Webservices beschreibt:

Code:
<wsp:Policy>
    <wsp:ExactlyOne>
        <wsp:All>
            <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                <wsp:Policy>
                    <sp:TransportToken>
                        <wsp:Policy>
                            <sp:HttpsToken RequireClientCertificate="false"/>
                        </wsp:Policy>
                    </sp:TransportToken>
                    <sp:AlgorithmSuite>
                        <wsp:Policy>
                            <sp:Basic256/>
                        </wsp:Policy>
                    </sp:AlgorithmSuite>
                    <sp:Layout>
                        <wsp:Policy>
                            <sp:Strict/>
                        </wsp:Policy>
                    </sp:Layout>
                    <sp:IncludeTimestamp/>
                </wsp:Policy>
            </sp:TransportBinding>
            <sp:EndorsingSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                <wsp:Policy>
                    <sp:X509Token
                            sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
                        <wsp:Policy>
                            <sp:RequireThumbprintReference/>
                            <sp:WssX509V3Token10/>
                        </wsp:Policy>
                    </sp:X509Token>
                    <sp:SignedParts>
                        <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing"/>
                    </sp:SignedParts>
                </wsp:Policy>
            </sp:EndorsingSupportingTokens>
            <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                <wsp:Policy>
                    <sp:MustSupportRefThumbprint/>
                </wsp:Policy>
            </sp:Wss11>
            <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                <wsp:Policy>
                    <sp:MustSupportIssuedTokens/>
                    <sp:RequireClientEntropy/>
                    <sp:RequireServerEntropy/>
                </wsp:Policy>
            </sp:Trust10>
            <wsaw:UsingAddressing/>
        </wsp:All>
    </wsp:ExactlyOne>
</wsp:Policy>

Meine Erwartung aus Java und C# wären das mein Client nach den Import der WSDL Datei fast vollständig konfiguriert ist. In diesen Beispiel würde nur noch die Nennung des Signaturzertifikats fehlen.

In Delphi passiert jedoch nichts, es wird kein einziger geforderte SOAP Header mitgeschickt wie z.B. der Timestamp:

Code:
   
<wsu:Timestamp wsu:Id="TS-59e35d1a-97e3-45c0-a6e5-850e107005b4">
    <wsu:Created>2017-12-19T13:57:53.340Z</wsu:Created>
    <wsu:Expires>2017-12-19T14:02:53.340Z</wsu:Expires>
</wsu:Timestamp>
Es geht mir nicht um den SOAP Body, der wird richtig erzeugt.

Union 20. Dez 2017 09:04

AW: SOAP Webservice in Delphi?
 
WS-Security wird nicht vom WsdlImporter unterstützt.

Elrond 20. Dez 2017 10:16

AW: SOAP Webservice in Delphi?
 
Zitat:

Zitat von Union (Beitrag 1389325)
WS-Security wird nicht vom WsdlImporter unterstützt.


Soweit ich das überblicke wird es nicht nur vom Importer nicht unterstützt, er wird überhaupt in keinster Weise von Delphi unterstützt? Benötige ich einen Security Header, muss ich TSOAPHeader ableiten und einen eigenen Konverter schreiben. Eine Kryptobibliothek wird scheinbar auch nicht mitgeliefert, das bedeutet selbst wenn man sich diese absolut unnötige arbeit antun möchte würde man an diesen Punkt ebenfalls scheitern.

Wenn sich das wirklich so verhält bin ich ziemlich Fassungslos, wofür bezahlt man solch tierische Lizenzkosten...

Union 20. Dez 2017 11:02

AW: SOAP Webservice in Delphi?
 
Hilft ja nichts. Hier ist ein Lösungsansatz. Ansonsten schreib den Client in einer Sprache für die es das WSS Framework und passende Import-Tools gibt und kopple den an Dein Delphi Programm.

Elrond 28. Dez 2017 09:44

AW: SOAP Webservice in Delphi?
 
Zitat:

Zitat von Union (Beitrag 1389335)
Hilft ja nichts. Hier ist ein Lösungsansatz. Ansonsten schreib den Client in einer Sprache für die es das WSS Framework und passende Import-Tools gibt und kopple den an Dein Delphi Programm.

Aktuell handhabe ich das auch so, das ganze erzeugt aber eine unnötige Komplexität und die Kunden sind auch nicht begeistert warum jetzt noch Java/.net mitgeliefert wird. Für mich ist das wieder ein weiterer Sargnagel für Delphi.


In den letzten Tagen habe ich noch die Clever Internet Suite ausprobiert. Die konnte zumindest bis auf eine WSS-Anforderung alle erfüllen. Das einzige was nicht ging, war das einbinden des Zertifikats in die SOAP Nachricht. Nachträglich einfügen zerstört jedoch die Signatur, damit macht dieser eine Punkt wieder alles zunichte.

Bernhard Geyer 28. Dez 2017 11:24

AW: SOAP Webservice in Delphi?
 
Zitat:

Zitat von Elrond (Beitrag 1389740)
Aktuell handhabe ich das auch so, das ganze erzeugt aber eine unnötige Komplexität und die Kunden sind auch nicht begeistert warum jetzt noch Java/.net mitgeliefert wird.

Net ist doch eh auf jedem Windows-Rechner drauf.
Aber müsste nicht Windows einen Importer haben, um aus einer SOAP-Schnittstelle ein COM-Interface zu erstellen das du dann nutzen kannst.
Leider kann ich dir keine weitern Infos dazu geben, da im Delphi-Umfeld mir SOAP seit langen nicht mehr begegnet ist (Hätte es vor Jahren mal gebraucht - hat sich dann aber anderweitig erledigt)

Zitat:

Zitat von Elrond (Beitrag 1389740)
Für mich ist das wieder ein weiterer Sargnagel für Delphi.

Wohl eher ein Sarg-Nägelchen.
Viele Firmen verlassen den SOAP-Weg (u.a. wegen der Komplexität u.a. bei Sicherheitsanforderungen) und wechseln auf REST/JSON und Co.
Schau mal nach ob es für deine Anforderung auch diese moderner Schnittstelle gibt?

Zitat:

Zitat von Elrond (Beitrag 1389740)
In den letzten Tagen habe ich noch die Clever Internet Suite ausprobiert.

Probier auch mal die IPWorks-Komponenten aus: http://cdn.nsoftware.com/help/IP9/dlp/SOAP.htm
Wir setzen von IPWorks die Komponenten für http(s)/ftp(s) ein und sind sehr zufrieden damit.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 Uhr.
Seite 1 von 3  1 23      

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