Gewusst wie: Definieren und Verarbeiten von SOAP-Headern
Codebeispiel
SOAP-Header können mit Webdiensten, die mithilfe von ASP.NET erstellt wurden, definiert und bearbeitet werden. Zur Definition eines SOAP-Headers wird eine Klasse definiert, die die Daten in einem bestimmten SOAP-Header darstellt und die von der SoapHeader-Klasse abgeleitet wird.
So definieren Sie eine Klasse, die einen SOAP-Header darstellt
Erstellen Sie eine von der SoapHeader-Klasse abgeleitete Klasse, deren Name dem Stammelement für den SOAP-Header entspricht.
public class MyHeader : SoapHeader
Public Class MyHeader : Inherits SoapHeader
Fügen Sie öffentliche Felder oder Eigenschaften hinzu, wobei Sie für jedes Element im SOAP-Header Namen und entsprechende Datentypen zuordnen.
Wenn beispielsweise der folgende SOAP-Header gegeben ist, dann definiert der nachfolgende Code eine Klasse, die diesen SOAP-Header darstellt.
<soap:Header xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/"> <MyHeader xmlns="https://www.contoso.com"> <Created>dateTime</Expires> <Expires>long</Expires> </MyHeader> </soap:Header> public class MyHeader : SoapHeader { public DateTime Created; public long Expires; }
Public Class MyHeader : Inherits SoapHeader Public Created As DateTime Public Expires As Long End Class
So verarbeiten Sie SOAP-Header innerhalb eines Webdiensts
Fügen Sie der Klasse, die den Webdienst implementiert, einen öffentlichen Member des Typs hinzu, der den SOAP-Header repräsentiert.
[WebService(Namespace="https://www.contoso.com")] public class MyWebService { // Add a member variable of the type deriving from SoapHeader. public MyHeader timeStamp;
<WebService(Namespace:="https://www.contoso.com")> _ Public Class MyWebService ' Add a member variable of the type deriving from SoapHeader. Public TimeStamp As MyHeader
Wenden Sie ein SoapHeader-Attribut auf jede Webdienstmethode an, die den SOAP-Header verarbeiten soll. Legen Sie die MemberName-Eigenschaft des SoapHeader-Attributs auf den Namen der in Schritt 1 erstellten Membervariablen fest.
[WebMethod] [SoapHeader("timeStamp")] public void MyWebMethod()
<WebMethod, SoapHeader("TimeStamp")> _ Public Sub MyWebMethod()
Greifen Sie innerhalb der einzelnen Webdienstmethoden, auf die das SoapHeader-Attribut angewendet wird, auf die in Schritt 1 erstellte Membervariable zu, um die im SOAP-Header gesendeten Daten zu verarbeiten.
[WebMethod] [SoapHeader("myHeaderMemberVariable")] public string MyWebMethod() { // Verify that the client sent the SOAP Header. if (timeStamp == null) timeStamp = new MyHeader(); // Set the value of the SoapHeader returned to the client. timeStamp.Expires = 60000; timeStamp.Created = DateTime.UtcNow; return("Hello World!"); }
<WebMethod,SoapHeader("TimeStamp", _ Direction:=SoapHeaderDirection.InOut)> _ Public Function MyWebMethod() As String ' Process the SoapHeader. If (TimeStamp Is Nothing) Then TimeStamp = New MyHeader End If TimeStamp.Expires = 60000 TimeStamp.Created = DateTime.UtcNow Return "Hello World!" End Function
Beispiel
Das folgende Codebeispiel zeigt, wie ein SOAP-Header in einem mit ASP.NET erstellten Webdienst definiert und verarbeitet wird. Der Webdienst MyWebService
enthält eine Membervariable namens myHeaderMemberVariable
, deren Typ von SoapHeader (MyHeader
) abgeleitet ist und die auf die MemberName-Eigenschaft des SoapHeader-Attributs festgelegt ist. Außerdem wird ein SoapHeader-Attribut auf die Webdienstmethode MyWebMethod
angewendet, wobei myHeaderMemberVariable
angegeben wird. In der Webdienstmethode MyWebMethod
wird auf myHeaderMemberVariable
zugegriffen, um den Wert des XML-Elements Username
des SOAP-Headers abzurufen.
<%@ WebService Language="C#" Class="MyWebService" %>
using System.Web.Services;
using System.Web.Services.Protocols;
// Define a SOAP header by deriving from the SoapHeader class.
public class MyHeader : SoapHeader
{
public DateTime Created;
public long Expires;
}
[WebService(Namespace="https://www.contoso.com")]
public class MyWebService
{
// Add a member variable of the type deriving from SoapHeader.
public MyHeader myHeaderMemberVariable;
// Apply a SoapHeader attribute.
[WebMethod]
[SoapHeader("myHeaderMemberVariable")]
public void MyWebMethod()
{
// Process the SoapHeader.
if (myHeaderMemberVariable.Username == "admin")
{
// Do something interesting.
}
}
}
<%@ 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 Username As String
Public Password As String
End Class
<WebService(Namespace:="https://www.contoso.com")> _
Public Class MyWebService
' Add a member variable of the type deriving from SoapHeader.
Public myHeaderMemberVariable As MyHeader
' Apply a SoapHeader attribute.
<WebMethod, SoapHeader("myHeaderMemberVariable")> _
Public Sub MyWebMethod()
' Process the SoapHeader.
If (myHeaderMemberVariable.Username = "admin") Then
' Do something interesting.
End If
End Sub
End Class
Im vorstehenden Beispiel wird zusätzlicher Code ausgeführt, wenn die an MyWebMethod
gerichtete SOAP-Anforderung über einen SOAP-Header des Typs MyHeader
verfügt, in dem das UserName
-Element auf Admin
festgelegt ist. Das heißt, die folgende SOAP-Anforderung bewirkt, dass der Code ausgeführt wird.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<MyHeader xmlns="https://www.contoso.com">
<Created>dateTime</Created>
<Expires>long</Expires>
</MyHeader>
</soap:Header>
<soap:Body>
<MyWebMethod xmlns="https://www.contoso.com" />
</soap:Body>
</soap:Envelope>
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.