Cómo: Cambiar destinatarios de un encabezado SOAP

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.

Ejemplo de código

De forma predeterminada, un cliente de servicios Web envía encabezados SOAP a un método de servicio Web cuando se aplica un atributo SoapHeader a un método de servicio Web. No obstante, el método de servicio Web también puede devolver un encabezado SOAP al cliente del servicio Web. También se puede enviar de las dos formas. Al establecer la propiedad Direction de un atributo SoapHeader aplicado a un método de servicio Web se controla el destinatario del encabezado SOAP. La propiedad Direction es de tipo SoapHeaderDirection, que tiene cuatro valores: In, Out, InOuty Fault. Éstos hacen referencia al destinatario (si es el servidor del servicio Web), al cliente o al servidor del servicio Web y al cliente, y si el encabezado SOAP se envía al cliente cuando el servicio Web inicia una excepción.

Nota: la versión 1.0 de .NET Framework SDK no admite el valor Fault.

Para cambiar el destinatario del encabezado SOAP

  1. Defina el encabezado SOAP.

    public class MyHeader : SoapHeader 
    {
        public string Username;
        public string Password;
    }
    
    Public Class MyHeader : Inherits SoapHeader 
        Public Username As String
        Public Password As String
    End Class
    
  2. Agregue una variable miembro a la clase que implementa el servicio Web .

    [WebService(Namespace="https://www.contoso.com")]
    public class MyWebService : WebService
    {
        public MyHeader myOutHeader;
    
    <WebService(Namespace:="https://www.contoso.com")> _
    Public Class MyWebService : Inherits WebService
        Public myOutHeader As MyHeader
    
  3. Aplique un atributo SoapHeader a cada método de servicio Web que procesa el encabezado SOAP. Establezca la propiedad Direction en cada destinatario previsto, mediante la enumeración SoapHeaderDirection. El ejemplo siguiente define el cliente del servicio Web como destinatario estableciendo Direction en SoapHeaderDirection.Out.

    
        [WebMethod]
        [SoapHeader("myOutHeader",Direction=SoapHeaderDirection.Out)]
    
        <WebMethod, _
         SoapHeader("myOutHeader",Direction:=SoapHeaderDirection.Out)>
    
  4. Procese o establezca el encabezado SOAP, dependiendo del destinatario. El ejemplo de código siguiente establece los valores del encabezado SOAP, cuando el destinatario es el cliente del servicio Web.

          // Return the client's authenticated name.
          myOutHeader.Username = User.Identity.Name;
    
          ' Return the client's authenticated name.
          myOutHeader.Username = User.Identity.Name
    
    

Ejemplo

El ejemplo de código siguiente define un encabezado SOAP MyHeader que se envía del método de servicio Web al cliente.

<%@ 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 Username;
    public string Password;
}

[WebService(Namespace="https://www.contoso.com")]
public class MyWebService : WebService
{
    public MyHeader myOutHeader;
 
    [WebMethod]
    [SoapHeader("myOutHeader",Direction=SoapHeaderDirection.Out)]
    public void MyOutHeaderMethod() 
    {
      // Return the client's authenticated name.
      myOutHeader.Username = User.Identity.Name;          
    }
}
<%@ 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 : Inherits WebService
    Public myOutHeader As MyHeader 
    
    <WebMethod, _
     SoapHeader("myOutHeader",Direction:=SoapHeaderDirection.Out)> _
    Public Sub MyOutHeaderMethod()
        ' Return the client's authenticated name.
        myOutHeader.Username = User.Identity.Name
    End Sub
End Class

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