Gewusst wie: Behandeln von SOAP-Headern, die für einen XML-Webdienstclient benötigt werden
Codebeispiel
Ein Client kann erfordern, dass eine Webdienstmethode die Semantik des SOAP-Headers richtig interpretiert und diesen entsprechend verarbeitet, damit die SOAP-Anforderung erfolgreich beantwortet werden kann. Hierzu legen Clients das mustUnderstand-Attribut des SOAP-Headers auf 1 fest. Die folgende SOAP-Anforderung erfordert beispielsweise, dass der Empfänger der SOAP-Anforderung den Soap-Header MyCustomSoapHeader
verarbeitet.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/" >
<soap:Header>
<MyCustomSoapHeader soap:mustUnderstand="1" xmlns="https://www.contoso.com">
<custom>Keith</custom>
</MyCustomSoapHeader>
</soap:Header>
<soap:Body>
<MyUnknownHeaders xmlns="https://www.contoso.com" />
</soap:Body>
</soap:Envelope>
Wie der Webdienst einen vom Client benötigten SOAP-Header behandelt, hängt davon ab, ob der SOAP-Header vom Webdienst definiert wird oder nicht. ASP.NET übernimmt einen Großteil der Aufgaben, wenn der Webdienst den SOAP-Header definiert. Im nachfolgenden Abschnitt erfahren Sie, wie die beiden Fälle behandelt werden.
So behandeln Sie SOAP-Header, die vom Webdienst nicht definiert, aber von einem Webdienstclient benötigt werden
Folgen Sie den Schritten zur Behandlung unbekannter SOAP-Header von einem Webdienstclient, und beachten Sie besonders die DidUnderstand-Eigenschaft des SOAP-Headers.
Bei SOAP-Headern, die nicht durch den XML-Webdienst definiert wurden, ist der Anfangswert von DidUnderstand auf false festgelegt. Wenn ASP.NET nach der Rückgabe der Webdienstmethode SOAP-Header erkennt, deren DidUnderstand-Eigenschaft auf false festgelegt ist, wird automatisch eine Ausnahme des Typs SoapHeaderException ausgelöst.
So behandeln Sie SOAP-Header, die von einem Webdienstclient benötigt und vom Webdienst definiert werden
Führen Sie innerhalb jeder Webdienstmethode die Schritte für die Verarbeitung von SOAP-Headern in einem mit ASP.NET erstellten Webdienst aus.
Bei SOAP-Headern, die vom Webdienst definiert und in der Webdienstmethode, die den SOAP-Header empfängt, verarbeitet werden, setzt ASP.NET voraus, dass der Webdienst den SOAP-Header versteht, und legt den Anfangswert von DidUnderstand auf true fest.
Beispiel
Der folgende Webdienst MyWebService
definiert den SOAP-Header MyHeader
und erfordert, dass dieser bei jedem Aufruf der XML-Webdienstmethode MyWebMethod
gesendet wird. Darüber hinaus verarbeitet MyWebMethod
alle unbekannten SOAP-Header. Bei SOAP-Headern, die von MyWebMethod
verarbeitet werden können, wird DidUnderstand auf true festgelegt.
<%@ WebService Language="C#" Class="MyWebService" %>
using System.Web.Services;
using System.Web.Services.Protocols;
// Define a SOAP header by deriving from the SoapHeader base class.
public class MyHeader : SoapHeader {
public string MyValue;
}
public class MyWebService {
public MyHeader myHeader;
// Receive all SOAP headers other than the MyHeader SOAP header.
public SoapUnknownHeader[] unknownHeaders;
[WebMethod]
[SoapHeader("myHeader")]
//Receive any SOAP headers other than MyHeader.
[SoapHeader("unknownHeaders")]
public string MyWebMethod()
{
foreach (SoapUnknownHeader header in unknownHeaders)
{
// Perform some processing on the header.
if (header.Element.Name == "MyKnownHeader")
header.DidUnderstand = true;
else
// For those headers that cannot be
// processed, set DidUnderstand to false.
header.DidUnderstand = false;
}
return "Hello";
}
}
<%@ WebService Language="VB" Class="MyWebService" %>
Imports System.Web.Services
Imports System.Web.Services.Protocols
' Define a SOAP header by deriving from the SoapHeader base class.
Public Class MyHeader : Inherits SoapHeader
Public MyValue As String
End Class
Public Class MyWebService
Public myHeader As MyHeader
' Receive all SOAP headers other than the MyHeader SOAP header.
Public unknownHeaders() As SoapUnknownHeader
<WebMethod, _
SoapHeader("myHeader"), _
SoapHeader("unknownHeaders")> _
Public Function MyWebMethod() As String
'Receive any SOAP headers other than MyHeader.
Dim header As SoapUnknownHeader For Each header In unknownHeaders
' Perform some processing on the header.
If header.Element.Name = "MyKnownHeader" Then
header.DidUnderstand = True
' For those headers that cannot be
' processed, set DidUnderstand to false.
Else
header.DidUnderstand = False
End If
Next header
Return "Hello"
End Function
End Class
![]() |
---|
Die DidUnderstand-Eigenschaft wird von ASP.NET zur Kommunikation mit der Webdienstmethode verwendet. Diese Eigenschaft ist in der SOAP-Spezifikation nicht enthalten, ihr Wert kommt weder in der SOAP-Anforderung noch in der SOAP-Antwort vor. |
![]() |
---|
Wenn ein Webdienst einen SOAP-Header weiterleitet, müssen die Richtlinien in der SOAP-Spezifikation unbedingt beachtet werden, insbesondere jene, die den Wert von Actor betreffen. Weitere Informationen finden Sie auf der W3C-Website unter http://www.w3.org/TR/soap (nur auf Englisch verfügbar). |
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.