Cómo: Controlar el formato de parámetros y valores devueltos para un método de servicio Web

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.

Para el formato, o uso, de elementos XML que corresponden a parámetros de método y valores devueltos, el lenguaje de descripción de servicios Web (WSDL) proporciona dos opciones: SOAP codificado y literal. .NET Framework controla estas opciones en código con los atributos. Aunque ASP.NET proporciona una arquitectura extensa para controlar cómo se da formato al XML, no se garantiza el orden en el que se serializan los parámetros.

Para especificar formato de parámetro Literal

  1. Aplique un atributo SoapDocumentMethod a un método en la clase de proxy, estableciendo la propiedad Use en SoapBindingUse.Literal.

    La enumeración SoapBindingUse especifica los estilos de formato de los parámetros disponible a un servicio Web creado con ASP.NET.

    [SoapDocumentMethod(
        "https://www.contoso.com/DocumentLiteral",
        RequestNamespace="https://www.contoso.com",
        ResponseNamespace="https://www.contoso.com",
        Use=SoapBindingUse.Literal)]
    public string DocumentLiteral(Address1 address, bool useZipPlus4) {
    
    <SoapDocumentMethod( _
       "https://www.contoso.com/DocumentLiteral", _
       RequestNamespace:="https://www.contoso.com", _
       ResponseNamespace:="https://www.contoso.com", _
       Use:=SoapBindingUse.Literal)>  _
    Public Function DocumentLiteral(ByVal address As Address1, _
                             ByVal useZipPlus4 As Boolean) As String
    

    La parte XML de la solicitud SOAP al método de servicio Web DocumentLiteral continúa. Los parámetros residen dentro del elemento Body y están codificados como documentos XML por sí mismos, ya que hacen referencia a un esquema XSD.

    <?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>
        <DocumentLiteral xmlns="https://www.contoso.com">
          <address>
            <Street>One Microsoft Way</Street>
            <City>Redmond</City>
            <Zip>98052</Zip>
          </address>
          <useZipPlus4>True</useZipPlus4>
        </DocumentLiteral>
      </soap:Body>
    </soap:Envelope>
    

Para especificar un formato de parámetro codificado

  1. Aplique un atributo SoapDocumentMethod o un atributo SoapRpcMethod al método en la clase de proxy, estableciendo la propiedad Use en SoapBindingUse.Encoded.

    A diferencia del estilo de formato de parámetros Literal, el estilo de formato de los parámetros Codificado se puede utilizar junto con ambos estilos de formato de método de servicio Web. Para obtener más detalles sobre los estilos de formato de método de servicio Web, consulte Compatibilidad de .NET Framework para formatos SOAP

    [SoapDocumentMethod("https://www.contoso.com/DocumentEncoded",
                        RequestNamespace="https://www.contoso.com",
                        ResponseNamespace="https://www.contoso.com",
                        Use=SoapBindingUse.Encoded)]
    public string DocumentEncoded(Address address, bool useZipPlus4) {
    
    <SoapDocumentMethod("https://www.contoso.com/DocumentEncoded", _
                        RequestNamespace:="https://www.contoso.com", _
                        ResponseNamespace:="https://www.contoso.com", _
                        Use:=SoapBindingUse.Encoded)>  _
    Public Function DocumentEncoded(ByVal address As Address, _ 
                      ByVal useZipPlus4 As Boolean) As String
    

    La parte XML de la solicitud SOAP al método de servicio DocumentEncoded continúa. Observe cómo los parámetros se representan de manera muy diferente que en el estilo de formato Literal, ya que se les da formato utilizando las reglas de la codificación descritas en la sección 5 de la especificación SOAP. Preste especial atención al parámetro address, que no es un tipo de datos simple.

    <?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:soapenc="https://schemas.xmlsoap.org/soap/encoding/"
    xmlns:tns="https://www.contoso.com"
    xmlns:tnsTypes="https://www.contoso.com/encodedTypes"
    xmlns:wsdl="https://schemas.xmlsoap.org/wsdl/"
    xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body soap:encodingStyle="https://schemas.xmlsoap.org/soap/encoding/">
        <tnsTypes:DocumentEncoded>
          <address href="#1" />
          <useZipPlus4>boolean</useZipPlus4>
        </tnsTypes:DocumentEncoded>
        <tnsTypes:Address id="1">
          <Street id="2">string</Street>
          <City id="3">string</City>
          <Zip id="4">string</Zip>
        </tnsTypes:Address>
      </soap:Body>
    </soap:Envelope>
    

Vea también

Referencia

SoapDocumentMethodAttribute
SoapRpcMethodAttribute

Otros recursos

Personalizar el formato de mensajes SOAP