Freigeben über


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

  1. 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
    
  2. 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
    
    
  3. 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
    
  4. 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
    
    NoteHinweis:

    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.

    NoteHinweis:

    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

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.