AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Bei SOAP-ENV Header Namespace hinzufügen

Bei SOAP-ENV Header Namespace hinzufügen

Ein Thema von Samuel Kurmann · begonnen am 4. Feb 2021 · letzter Beitrag vom 9. Feb 2021
Antwort Antwort
Samuel Kurmann

Registriert seit: 12. Jan 2021
8 Beiträge
 
#1

Bei SOAP-ENV Header Namespace hinzufügen

  Alt 4. Feb 2021, 15:04
Hallo Zusammen

Ich habe ein Problem mit dem erstellen eines XML's. Es geht dabei um den Soap Header, Beispiel:
Code:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <SOAP-ENV:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Wie kriege ich es im Code hin den Namespace "xmlns:wsa="http://www.w3.org/2005/08/addressing"" zu definieren?

Hintergrundinfos:
Das XML ist mit Absicht nicht weiter ausgefüllt, was darin steht spielt für das Problem keine Rolle.
Im Soap Header kommen noch weitere Nodes rein, diese habe ich im Delphi mit einer TSoapHeader abgeleiteten Klasse definiert und danach mit "FRIO.SOAPHeaders.Send(Header);" hinzugefügt. Dies klappt auch prima. Nur den Namespace ("xmlns:wsa="http://www.w3.org/2005/08/addressing""), kriege ich nicht hin.
Ich habe kein WSDL dazu, es sind eigens geschriebene Objekte.

Mein Ziel wäre es nicht mit irgenwelchen "Replace" Funktionen oder ähnlichem rumzubasteln.
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
208 Beiträge
 
#2

AW: Bei SOAP-ENV Header Namespace hinzufügen

  Alt 4. Feb 2021, 16:40
Vielleicht so:
Delphi-Quellcode:
  Result := NewXMLDocument.GetDocBinding('dingsbums', TXMLIrgendwas, TargetNamespace) as IXMLIrgendwas;
  Result.DeclareNamespace('wsa', 'http://www.w3.org/2005/08/addressing');
LG Icocnito
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.882 Beiträge
 
Delphi 12 Athens
 
#3

AW: Bei SOAP-ENV Header Namespace hinzufügen

  Alt 4. Feb 2021, 16:43
Sorry wenn ich mich dumm anstelle, aber ich versuche deine Frage zu verstehen.
Der Soap-Webserverice liegt nicht als Quellocde oder WSDL oder als Interface typ vor?
Und du hättest gerne einen SOAP Client der den Webservice bedient?
Das einzige was du hast ist eine Mitgeschnittenes Kommunikationsbeispiel?

Ist das hier hilfreich?
Unter dem Inhaltsverzeichnis ist ein Beispiel XML .

https://www.w3.org/TR/2006/REC-ws-addr-soap-20060509/
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty ( 4. Feb 2021 um 16:50 Uhr)
  Mit Zitat antworten Zitat
Samuel Kurmann

Registriert seit: 12. Jan 2021
8 Beiträge
 
#4

AW: Bei SOAP-ENV Header Namespace hinzufügen

  Alt 5. Feb 2021, 08:21
Sorry für die ungenaue Beschreibung, ich versuche es nochmals ein bisschen genauer.

Ich habe schon eine WSDL, welche aber nicht von mir kommt und ich nicht anpassen kann/darf.
Im WSDL ist aber der Header nicht definiert sondern nur der Body. Den Header muss ich manuell vor dem versenden des XML's über
"FRIO.SOAPHeaders.Send(Header);" hinzufügen. Wobei hier "Header" meine eigene Klasse abgeleitet von TSoapHeader ist, welche aber nur den Teil zwischen "<SOAP-ENV:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">" und "</SOAP-ENV:Header>" definiert. Mir ist nun nicht klar, wie ich auf den Node "SOAP-ENV:Header" zugreifen kann.

Das einzige was du hast ist eine Mitgeschnittenes Kommunikationsbeispiel?
Nein, ich habe hier aus Datenschutzgründen nur den Aufbau des XML's gezeigt, im Header und Body gibt es weitere Nodes, welche auch alle korrekt abgefüllt werden, es geht wirklich nur um den Namespace hinzuzufügen im Soap Header node.

@Incocnito funktioniert leider nicht, da ich nicht ein neues XMLDocument erstelle. Das DeclareNamespace kenne ich und ist wahrscheinlich die Antwort, aber es muss auf der richtigen Node gemacht werden, ich weiss nur nicht wie ich zu dieser Node komme.


Hoffe ich konnte das Problem nochmals ein bisschen besser erklären.

Geändert von Samuel Kurmann ( 5. Feb 2021 um 08:25 Uhr)
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.882 Beiträge
 
Delphi 12 Athens
 
#5

AW: Bei SOAP-ENV Header Namespace hinzufügen

  Alt 5. Feb 2021, 17:25
OK.
Also du möchtest selber machen was der THTTPRIO Client den man bei der Codegeneration verwendet schon von alleine macht?
Ich lasse das leider immer von Delphi machen. Kann dir also dann wohl doch nicht helfen es von hand zu machen.

Ich lasse einfach dieses batchfile(je nach service angepasst) laufen und erhalte einen funktionierenden client.
Code:
c:
cd C:\MyClient
powershell.exe -Command "(new-object System.Net.WebClient).DownloadFile('http://MyService:8080/wsdl/IMYClient','MYClientWSDL.xml') "
Pause
c:
CD C:\Program Files (x86)\Embarcadero\Studio\21.0\bin
WSDLIMP -P -Ov+ -Oz- -DC:\MyClient C:\MyClient\MYClientWSDL.xml
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty ( 5. Feb 2021 um 17:46 Uhr)
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.882 Beiträge
 
Delphi 12 Athens
 
#6

AW: Bei SOAP-ENV Header Namespace hinzufügen

  Alt 5. Feb 2021, 17:51
Also es gibt in der Unit
Soap.SOAPENV eine Klasse
TSoapEnvelope mider der Methode
MakeHeader Wenn du die mit der option [soSOAP12] aufrufst erzeugt sie den header mit dem von dir gewünschten namespace

der namespace ist in der konstante
Unit Soap.SOAPConst
Delphi-Quellcode:
  SSoapNamespace = 'http://schemas.xmlsoap.org/soap/envelope/'; { do not localize }
  SSoap12Namespace = 'http://www.w3.org/2003/05/soap-envelope'; { do not localize }
  SOAPEnvelopeNamespaces: array[Boolean] of string = (SSoapNamespace, SSoap12Namespace);
hilft das?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Samuel Kurmann

Registriert seit: 12. Jan 2021
8 Beiträge
 
#7

AW: Bei SOAP-ENV Header Namespace hinzufügen

  Alt 9. Feb 2021, 16:53
@QuickAndDirty Hmmm ich hab es mir angeschaut und es sieht schon so aus, als könnte es helfen.

Leider finde ich bei mir nicht die richtige Stelle. Mein XMLDocument ist bereits im THTTPRIO und ich kann nicht mehr darauf zugreifen
Bzw. weiss ich nicht wie, das sollte doch irgendwie gehen?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 Uhr.
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