Gewusst wie: Behandeln unbekannter SOAP-Header
Ein Webdienstclient kann eine SOAP-Anforderung zusammen mit einem SOAP-Header an eine Webdienstmethode senden, der vom Webdienst zwar erwartet, möglicherweise aber nicht explizit definiert wurde. In diesem Fall muss unbedingt festgestellt werden, ob die Semantik des SOAP-Header verstanden und verarbeitet wird, da die SOAP-Spezifikation das Auslösen einer Ausnahme angibt, wenn das mustUnderstand-Attribut bei SOAP-Headern auf true festgelegt ist. Ausführliche Informationen zum Behandeln von SOAP-Headern, die für einen Client erforderlich sind, finden Sie unter Behandeln von SOAP-Headern, die für einen XML-Webdienstclient erforderlich sind.
So behandeln Sie unbekannte SOAP-Header eines Webdienstclients
Fügen Sie der Klasse, die den Webdienst mit dem Typ SoapUnknownHeader oder SoapHeader oder einem Array von beiden implementiert, eine Membervariable hinzu, um mehrere unbekannte SOAP-Header zu behandeln.
Die Deklaration des Typs als Array oder als einzelne Instanz von SoapUnknownHeader hat den zusätzlichen Vorteil, dass SoapUnknownHeader über eine Element-Eigenschaft verfügt. Die Element-Eigenschaft weist den Typ XmlElement auf und stellt das XML-Dokument für das Header-Element der SOAP-Anforderung oder der SOAP-Antwort dar. Folglich kann eine Webdienstmethode den Namen des SOAP-Headers zusammen mit den vom SOAP-Header übergebenen Daten durch Abfragen der Element-Eigenschaft feststellen.
public class MyWebService { public SoapUnknownHeader[] unknownHeaders;
Public Class MyWebService Public unknownHeaders() As SoapUnknownHeader
Wenden Sie ein SoapHeader-Attribut auf jede Webdienstmethode an, die jeden unbekannten SOAP-Header verarbeiten will.
[WebMethod] [SoapHeader("unknownHeaders")] public string MyWebMethod()
<WebMethod, _ SoapHeader("unknownHeaders") > _ Public Function MyWebMethod() As String
Fügen Sie Code hinzu, um festzustellen, ob Sie unbekannte SOAP-Header verarbeiten können.
Wenn die Membervariable den Typ SoapUnknownHeader aufweist, kann eine Webdienstmethode den Namen des SOAP-Headers zusammen mit den vom SOAP-Header übergebenen Daten durch Abfragen der Element-Eigenschaft feststellen. Die Name-Eigenschaft der Element-Eigenschaft gibt den Namen des SOAP-Headers an.
foreach (SoapUnknownHeader header in unknownHeaders) { // Check to see if this a known header. if (header.Element.Name == "MyKnownHeader")
Dim header As SoapUnknownHeader For Each header In unknownHeaders ' Check to see if this is a known header. If (header.Element.Name = "MyKnownHeader") Then
Wenn bekannt ist, wie ein bestimmter SOAP-Header verarbeitet werden soll, legen Sie die DidUnderstand-Eigenschaft der Membervariable, die den unbekannten SOAP-Header darstellt, auf true fest.
Wenn eine Webdienstmethode einen unbekannten SOAP-Header verarbeitet und die DidUnderstand-Eigenschaft nicht auf true festlegt, kann SoapHeaderException ausgelöst werden. Weitere Einzelheiten finden Sie unter Behandeln von SOAP-Headern, die für einen XML-Webdienstclient erforderlich sind.
// Check to see if this is a known header. if (header.Element.Name == "MyKnownHeader") header.DidUnderstand = true; else // For those headers that cannot be // processed, set DidUnderstand to false. header.DidUnderstand = false; }
' Check to see if this a known header. If (header.Element.Name = "MyKnownHeader") Then header.DidUnderstand = True Else ' For those headers that cannot be ' processed, set DidUnderstand to false. header.DidUnderstand = False End If
Hinweis: Die DidUnderstand-Eigenschaft wird von Webdiensten, die mit ASP.NET erstellt wurden, für die Kommunikation mit der Webdienstmethode verwendet. Sie ist nicht Teil der SOAP-Spezifikation. Ihr Wert erscheint in keinem Teil der SOAP-Anforderung oder der SOAP-Antwort.
Hinweis: Wenn ein Webdienstclient eine Proxyklasse mithilfe des Web Services Description Language-Tools (Wsdl.exe) erstellt und ein Webdienst die Membervariable, die einen SOAP-Header darstellt, mit dem SoapUnknownHeader-Typ definiert, wird der Proxyklasse kein Verweis auf diesen SOAP-Header hinzugefügt. Wenn ein Webdienst beschließt, der SOAP-Anforderung diesen SOAP-Header hinzuzufügen, muss die Proxyklasse geändert werden, indem eine Membervariable hinzugefügt und ein SoapHeader-Attribut auf die Methode angewendet wird, die den Aufruf an die entsprechende Webdienstmethode ausführt.
Siehe auch
Referenz
SoapHeader
SoapHeaderAttribute
SoapUnknownHeader
SoapHeaderException
Konzepte
Erstellen von XML-Webdienstclients
Weitere Ressourcen
Verwenden von SOAP-Headern
XML-Webdienste, die ASP.NET verwenden
Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.