Cómo: Personalizar mensajes SOAP con serialización XML

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.

El espacio de nombres System.Web.Serialization proporciona numerosos atributos para controlar la serialización XML que se puede aplicar a los parámetros y a los valores devueltos de métodos de servicios Web. En este tema se muestra cómo usar el atributo XmlElementAttribute.

Para especificar el nombre del elemento XML que representa un parámetro

  1. Aplique un atributo XmlElement al parámetro, que especifica el nombre deseado para el elemento y, opcionalmente, un espacio de nombres si el formato de parámetro está establecido en Literal. Si el formato de parámetro está establecido en Encoded, aplique un atributo SoapElement al parámetro.

    El ejemplo de código siguiente espera los nombres de elementos que representan los parámetros sean MyAddressElement, MyZipElementy ReturnValueElement. También que espera el nombre de elemento que representa el valor devuelto sea ReturnValueElement. El método de servicio Web al que se da formato en el ejemplo es Document, que es el valor predeterminado de ASP.NET.

    <%@ WebService Language="C#" Class="SoapDocumentServiceSample" %>
     using System.Web.Services;
     using System.Web.Services.Protocols;
     using System.Xml.Serialization;
    
    [WebService(Namespace="https://www.contoso.com")] 
    public class SoapDocumentServiceSample  
    {
      [ WebMethod ]
      [ return: XmlElement("ReturnValueElement",IsNullable=false)]
      public Address ValidateAddress(
        [XmlElement("MyAddressElement")] Address MyAddress,
        [XmlElement("MyZipElement")] bool useZipPlus4) 
      {
        useZipPlus4 = true;    
        return new Address();
      }
    }
    
    <%@ WebService Language="VB" Class="SoapDocumentServiceSample" %>
     Imports System.Web.Services
     Imports System.Web.Services.Protocols
     Imports System.Xml.Serialization
    
    <WebService(Namespace := "https://www.contoso.com")> _
    Public Class SoapDocumentServiceSample
      < WebMethod > _
      Public Function ValidateAddress( _
           <XmlElement("MyAddressElement")> MyAddress As Address, _
           <XmlElement("MyZipElement")> useZipPlus4 As Boolean)  
           As <XmlElement("ReturnValueElement",IsNullable :=false)> _
           Address 
            useZipPlus4 = True 
         Return new Address()
      End Function
    End Class
    

    El servicio Web espera la siguiente solicitud SOAP. Observe que los nombres de elementos coinciden con lo especificado en el atributo XmlElement, lo contrario a los nombres de parámetros.

    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <ValidateAddress xmlns="http://tempuri.org/">
          <MyAddressElement>
            <Street>string</Street>
            <City>string</City>
            <Zip>string</Zip>
          </MyAddressElement>
          <MyZipElement>boolean</MyZipElement>
        </ValidateAddress>
      </soap:Body>
    </soap:Envelope>
    

Vea también

Referencia

System.Xml.Serialization Namespace
SoapDocumentMethodAttribute
SoapRpcMethodAttribute
SoapDocumentServiceAttribute
SoapRpcServiceAttribute

Conceptos

Modificación de mensajes SOAP con extensiones SOAP
Generar clientes de servicios web XML

Otros recursos

Personalizar el formato de mensajes SOAP
Introducing XML Serialization
Servicios web XML con ASP.NET