Freigeben über


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

  1. 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
    
  2. 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

  1. 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
    
  2. 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()
    
  3. 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

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.