Cómo: Controlador encabezados SOAP desconocidos

Este tema es específico de una tecnología heredada. Ahora, los servicios Web XML y los clientes de servicios Web XML deben crearse con Windows Communication Foundation.

Un cliente de servicios Web puede enviar una solicitud SOAP con un encabezado SOAP a un método de servicio Web que el servicio Web estaba esperando, pero no podría haber definido explícitamente. En este caso, es importante determinar si la semántica del encabezado SOAP se entiende y procesa, ya que la especificación SOAP indica que se iniciará una excepción cuando los encabezados SOAP tengan un atributo mustUnderstand establecido en true. Para obtener detalles sobre la administración de los encabezados SOAP requeridos por un cliente, consulte Controlar encabezados SOAP requeridos por un cliente del servicio Web XML.

Para controlar los encabezados SOAP desconocidos de un cliente de servicios Web

  1. Agregue una variable miembro a la clase que implementa el servicio Web con un tipo de SoapUnknownHeader o SoapHeader o una matriz de uno de ellos para controlar varios encabezados SOAP desconocidos.

    Al declarar el tipo como una matriz o una instancia única de SoapUnknownHeader, se tiene la ventaja adicional que SoapUnknownHeader tiene una propiedad Element. La propiedad Element es de tipo XmlElement y representa el documento XML para el elemento Header de la solicitud o la respuesta SOAP. Así, un método de servicio Web puede determinar el nombre del encabezado SOAP, junto con los datos pasados por el encabezado SOAP, consultando la propiedad Element.

    public class MyWebService {
        public SoapUnknownHeader[] unknownHeaders;
    
    Public Class MyWebService
        Public unknownHeaders() As SoapUnknownHeader
    
  2. Aplique un atributo SoapHeader a cada método de servicio Web que esté pensado para procesar cada encabezado SOAP desconocido.

    
        [WebMethod]
        [SoapHeader("unknownHeaders")]
        public string MyWebMethod()
    
        <WebMethod, _
         SoapHeader("unknownHeaders") > _
        Public Function MyWebMethod() As String
    
    
  3. Agregue código para determinar si puede procesar cualquier encabezado SOAP desconocido.

    Si la variable miembro es de tipo SoapUnknownHeader, un método de servicio Web puede determinar el nombre del encabezado SOAP, junto con los datos pasados por el encabezado SOAP, consultando la propiedad Element. La propiedad Name de la propiedad Element identifica el nombre del encabezado SOAP.

    
           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. Establezca la propiedad DidUnderstand de la variable miembro que representa el encabezado SOAP desconocido en true si se sabe cómo procesar un encabezado SOAP determinado.

    Si un método de servicio Web procesa un encabezado SOAP desconocido y no establece la propiedad DidUnderstand en true, se puede iniciar SoapHeaderException. Para obtener más detalles, consulte Controlar encabezados SOAP requeridos por un cliente del servicio Web XML

             // 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
    
    hf2y839a.note(es-es,VS.100).gifNota:
    Los servicios Web creados usando ASP.NET utilizan la propiedad DidUnderstand para comunicarse con el método de servicio Web. Esto no forma parte de la especificación SOAP. Su valor no aparece en cualquier parte de la solicitud o respuesta SOAP.

    hf2y839a.note(es-es,VS.100).gifNota:
    Cuando un cliente de servicios Web genera una clase de proxy mediante la herramienta Lenguaje de descripción de servicios Web (Wsdl.exe) y un servicio Web define la variable miembro que representa un encabezado SOAP con el tipo SoapUnknownHeader, no se agrega ninguna referencia a ese encabezado SOAP a la clase de proxy. Si un cliente de servicios Web decide agregar ese encabezado SOAP a la solicitud SOAP, debe modificar la clase de proxy agregando una variable miembro y aplicando un atributo SoapHeader al método que realiza la llamada al método de servicio Web aplicable.

Vea 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