Cómo: Definir y procesar encabezados 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
Los servicios Web creados con ASP.NET pueden definir y manipular los encabezados SOAP. Definir un encabezado SOAP se logra definiendo una clase que representa los datos en un encabezado SOAP determinado y derivándolo de la clase SoapHeader.
Para definir una clase que representa un encabezado SOAP
Cree una clase que deriva de la clase SoapHeader con un nombre que coincida con el elemento raíz para el encabezado SOAP.
public class MyHeader : SoapHeader
Public Class MyHeader : Inherits SoapHeader
Agregue campos públicos o propiedades, haciendo que coincidan los nombres y sus tipos de datos respectivos en cada elemento del encabezado SOAP.
Por ejemplo, determinado el encabezado SOAP siguiente, la clase que lo sigue define una clase que representa el encabezado SOAP.
<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
Para procesar los encabezados SOAP dentro de un Servicio Web
Agregue un miembro público a la clase que implementa el servicio Web del tipo que representa el encabezado SOAP.
[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
Aplique un atributo SoapHeader a cada método de servicio Web que pretenda procesar el encabezado SOAP. Establezca la propiedad MemberName del atributo SoapHeader en el nombre de la variable miembro creada en el primer paso.
[WebMethod] [SoapHeader("timeStamp")] public void MyWebMethod()
<WebMethod, SoapHeader("TimeStamp")> _ Public Sub MyWebMethod()
Dentro de cada método de servicio Web al que se aplica el atributo SoapHeader, tenga acceso a la variable miembro creada en el primer paso para procesar los datos enviados en el encabezado SOAP.
[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
Ejemplo
El ejemplo de código siguiente muestra cómo definir y procesar un encabezado SOAP en un servicio Web creado con ASP.NET. El servicio Web MyWebService
tiene una variable miembro denominada myHeaderMemberVariable
, que es de un tipo que deriva de SoapHeader (MyHeader
) y se encuentra establecida en la propiedad MemberName del atributo SoapHeader. Además, un atributo SoapHeader se aplica al método de servicio Web MyWebMethod
que especifica myHeaderMemberVariable
. Dentro del método de servicio Web myHeaderMemberVariable
se accede a Username
para obtener el valor del elemento XML MyWebMethod
del encabezado SOAP.
<%@ 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
En el ejemplo anterior, si la solicitud SOAP a MyWebMethod
tiene un encabezado SOAP MyHeader
con un elemento UserName
establecido en Admin
, se ejecuta código adicional. Es decir, la siguiente solicitud SOAP produce que ese código se ejecute.
<?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>
Vea también
Referencia
SoapHeader
SoapHeaderAttribute
SoapUnknownHeader
SoapHeaderException
Conceptos
Generar clientes de servicios web XML