Share via


Cómo: Controlar encabezados SOAP requeridos por un cliente del servicio web XML

Ejemplo de código

Un cliente puede requerir un método de servicio web para interpretar correctamente las semántica del encabezado SOAP y procesarlo de manera adecuada para que la solicitud SOAP tenga éxito. Para esto, los clientes establecieron el atributo mustUnderstand del encabezado SOAP en 1. Por ejemplo, la siguiente solicitud SOAP le pide al destinatario de la solicitud SOAP que procese el encabezado SOAP MyCustomSoapHeader.

<?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>

El hecho de que el servicio web defina el encabezado SOAP determina cómo debería el servicio web administrar los encabezados SOAP requeridos por el cliente. ASP.NET controla una gran cantidad de trabajo en el caso en que el servicio web defina el encabezado SOAP. En el procedimiento que sigue, puede obtener información sobre cómo administrar los dos casos.

Para administrar encabezados SOAP no definidos por el servicio web, pero requeridos por un cliente de servicios web

  • Siga los pasos para administrar los encabezados SOAP desconocidos de un cliente de servicios web, prestando especial atención a la propiedad DidUnderstand del encabezado SOAP.

    Para los encabezados SOAP que no estén definidos por el servicio web, el valor inicial deDidUnderstand es false. Si ASP.NET detecta los encabezados SOAP con su propiedad DidUnderstand establecida como false después de que el método de servicio web devuelva, se inicia unSoapHeaderException automáticamente.

Para administrar encabezados SOAP requeridos por un cliente de servicio web y definidos por el servicio web

  • Siga los pasos para procesar encabezados SOAP dentro de un servicio web creado mediante ASP.NET dentro de cada método de servicio web.

    Para los encabezados SOAP definidos por el servicio web y procesados en el método de servicio web que recibe el encabezado SOAP, ASP.NET da por supuesto que el servicio web comprende el encabezado SOAP y establece el valor inicial de DidUnderstand como true.

Ejemplo

El siguiente servicio web MyWebService define el encabezado SOAP MyHeader y precisa que éste se envíe con cualquier llamada al método de servicio web MyWebMethod. Además, MyWebMethod procesa cualquier encabezado SOAP desconocido. Para los encabezados SOAP que puede procesar MyWebMethod, DidUnderstand se establece como true.

<%@ 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
Nota:

ASP.NET utiliza la propiedad DidUnderstand para comunicar con el método de servicio web. No forma parte de la especificación SOAP; su valor no aparece en ninguna parte de la solicitud SOAP o respuesta de SOAP.

Nota:

Si un servicio web reenvía un encabezado SOAP, es muy importante seguir las reglas en la especificación SOAP, sobre todo aquellas que pertenecen al valor de Actor. Para obtener más detalles, consulte el sitio web de W3C (http://www.w3.org/TR/soap).

Consulte también

Referencia

SoapHeader
SoapHeaderAttribute
SoapUnknownHeader
SoapHeaderException

Conceptos

Generar clientes de servicios web XML

Otros recursos

Usar encabezados SOAP
Servicios web XML con ASP.NET

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.