Ich habe fast keine Erfahrung mit SOAP-Protokoll. Der Dienst, den ich mit dem erforderlichen Header verbinden muss. Ich denke, das ist etwas Standard in Java, aber in C # muss man diesen Header von Hand erstellen.
Ist jemand hier in der Lage gewesen, sich mit einem ähnlichen Dienst zu verbinden: den Header erstellt oder vielleicht sogar etwas über eine Standard-Bibliothek wissen, die die Erstellung des Headers vereinfachen würde? Können Sie Code oder Referenzen teilen?
Ich habe auch einen Hinweis gefunden, dass vielleicht Header erzeugt wird, wenn WS2005 verwendet wird, weil es ein WS3 Addin dafür gibt. Kann jemand das kommentieren? Nach einem kurzen Blick auf dieses Add-In habe ich ähnliche Felder wie im Security-Header gefunden, konnte aber den Header noch nicht erstellen.
Lustig, das solltest du erwähnen - ich habe genau vor kurzem getan.
Ich habe es geschafft, ein SoapExtension
zu verwenden, das ChainStream
verwendet, um eine Kopie des ursprünglichen Streams zu behalten, kopiert nur den Stream während BeforeDeserialize
und fügt den Header während AfterSerialize
hinzu.
Beim Hinzufügen des Headers wird der Inhalt des "neuen" Streams (von ChainStream
zurückgegeben) in ein XML-Dokument ( XDocument
in meinem Fall) gelesen, der Header hinzugefügt und dann in das Original geschrieben Stream wurde an ChainStream
übergeben.
Leider ist das ziemlich dreckig, und Sie können (soweit mir bekannt ist) bei Bedarf keine neue Instanz mit entsprechenden Authentifizierungsinformationen verwenden.
Ich habe am meisten von der Methode, die stattdessen SoapHeader
verwendet, indem Sie jeder Methode des Webdienstes ein entsprechendes Attribut und auch ein entsprechendes Feld / eine entsprechende Eigenschaft mit einer Instanz des erforderlichen Headers hinzufügen - aber die SOAP-Serialisierung bereitet mir momentan Kopfzerbrechen bei der Angabe der richtigen Elementnamen (mit Namespaces). Es ist etwas, worüber ich andere gefragt habe, wenn ich Zeit dafür habe.
Es tut mir leid, dass ich Ihnen keine vollständige Antwort geben kann - und ich entschuldige mich auch für den Mangel an Code, der eher der Firma als mir gehört - aber hoffentlich gibt es Ihnen zumindest einen Ausgangspunkt.
Im Allgemeinen ist es sehr einfach, einen SOAP-Header zu Ihrem Web-Service-Proxy in .Net hinzuzufügen. Hier ist ein schnelles Codebeispiel.
Erstellen Sie einen neuen SOAP-Header
%Vor%In Ihrer Web-Service-Proxy-Klasse:
%Vor%Und dann zu verwenden:
%Vor%Bearbeiten: Es gibt andere Möglichkeiten zu diesem und Microsoft haben eine WSE-Bibliothek , die enthält WS-Security gibt viel mehr Funktionalität als das einfache Beispiel oben. Wenn Sie Kerberos-Token oder Zertifikatsignaturen in Ihrem SOAP-Header benötigen, ist dies der richtige Weg. Wenn Sie nur einen einfachen Benutzernamen und ein Passwort für einen Web-Service hinzufügen müssen, der über SSL läuft, dann ist das alles, was Sie brauchen.
Bearbeiten: Schneller Klappentext auf WSE Anfang dieses Jahrzehnts, als Web-Services die Welt erobern wollten, trafen sich eine Reihe von Branchenakteuren (Microsoft, IBM, Sun usw.), um Standards zu setzen Wege, Dinge über sie zu machen. Der gebildete Körper war OASIS . Seitdem hat Microsoft eine Reihe von Versionen seiner WSE-Bibliothek veröffentlicht, um einige der Spezifikationen zu unterstützen, aber interessanterweise wurden sie nie in das .NET-Framework integriert, obwohl die erste Version um 2003 veröffentlicht wurde.
Web-Dienste, die immer noch sehr beliebt sind und meiner Meinung nach eine gute Möglichkeit, zwischen verschiedenen Internet-Anwendungen zu integrieren, sind ein wenig in Ungnade gefallen. Einer der Gründe dafür ist zweifelsohne, dass AJAX und Web-Services nicht die besten Bettenfreunde waren, obwohl sich das verbessert hat. Web-Services werden auch ziemlich kompliziert, sobald Sie beginnen, alle zusätzlichen sWSE-Spezifikationen und einer der Thinge-Web-Services zu integrieren, war die Komplexität in anderen RPC-Protokolle, CORBA usw. Inzwischen hat REST eine Menge Popularität auf Kosten gewonnen Web-Services und AJAX-Bibliotheken bevorzugen es oft.
Web-Dienste werden nicht bald verschwinden, aber wahrscheinlich werden sie die Welt auch nicht bald übernehmen.