Compartir a través de


Cómo: Controlar el formato general del elemento Body en SOAP 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 estilo o el formato del elemento Body en SOAP global, el lenguaje de descripción de servicios Web (WSDL) proporciona dos opciones: RPC y Document. .NET Framework controla estas opciones en código con los atributos.

Para especificar un estilo de formato Document

  1. Aplique un atributo SoapDocumentMethod o SoapRpcMethod al método en la clase de proxy que llama al método de servicio Web aplicable.

    Los servicios Web creados mediante la compatibilidad ASP.NET usan los dos estilos de formato de los parámetros Encoded y Literal. El ejemplo siguiente combina el estilo de formato del método Document con el estilo de formato del parámetro Literal.

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

    Con el estilo de formato Document, un esquema XSD se define dentro de la descripción de servicio que define la solicitud y la respuesta SOAP. A continuación se muestra un fragmento de la descripción de servicio de la solicitud SOAP en el método de servicio Web DocumentWrappedLiteral. Puesto que el primer parámetro al método de servicio Web DocumentWrappedLiteral es una clase y se especificó el estilo de formato del parámetro Literal, se crea un esquema XSD para el tipo address.

    <s:element name="DocumentWrappedLiteral">
      <s:complexType>
        <s:sequence>
           <s:element minOccurs="1" maxOccurs="1" name="MyAddress"
                      nillable="true" type="s0:Address" /> 
           <s:element minOccurs="1" maxOccurs="1" name="useZipPlus4"
                      type="s:boolean" /> 
        </s:sequence>
      </s:complexType>
    </s:element>
    
    <s:complexType name="Address">
       <s:sequence>
          <s:element minOccurs="1" maxOccurs="1" name="Street"
                     nillable="true" type="s:string" /> 
          <s:element minOccurs="1" maxOccurs="1" name="City"
                     nillable="true" type="s:string" /> 
          <s:element minOccurs="1" maxOccurs="1" name="Zip" nillable="true"
                     type="s:string" /> 
       </s:sequence>
    </s:complexType>
    

    Con el esquema XSD definido en la descripción de servicio, sigue la parte XML de la solicitud SOAP al método de servicio DocumentWrappedLiteral. Tenga en cuenta que los elementos XML bajo el elemento Body de la solicitud SOAP coinciden con los elementos definidos en el 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>
        <DocumentWrappedLiteral xmlns="https://www.contoso.com">
          <MyAddress>
            <Street>string</Street>
            <City>string</City>
            <Zip>string</Zip>
          </MyAddress>
          <useZipPlus4>boolean</useZipPlus4>
        </DocumentWrappedLiteral>
      </soap:Body>
    </soap:Envelope>
    

Para especificar el estilo de formato RPC

  1. Aplique un atributo SoapRpcMethod al método en la clase de proxy que llama al método de servicio Web aplicable.

    [SoapRpcMethodAttribute("https://www.contoso.com/Rpc",
                            RequestNamespace="https://www.contoso.com",
                            ResponseNamespace="https://www.contoso.com")]
    public Address Rpc(Address address, bool useZipPlus4) {
    
    <SoapRpcMethodAttribute("https://www.contoso.com/Rpc", _
                            RequestNamespace:="https://www.contoso.com", _
                            ResponseNamespace:="https://www.contoso.com")> _
    Public Function Rpc(ByVal address As Address, _
                        ByVal useZipPlus4 As Boolean) As Address
    

    Un esquema XSD no se define estrictamente en la descripción de servicio para la solicitud o la respuesta SOAP al método Rpc del ejemplo anterior, sino simplemente las partes que los comprenden. Por consiguiente, examine la solicitud SOAP de el método Rpc, teniendo en cuenta que los parámetros se encapsulan dentro de un elemento y se codifican con el formato de parámetro Encoded.

    <?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/">
        <tns:Rpc>
          <address href="#1" />
          <useZipPlus4>boolean</useZipPlus4>
        </tns:Rpc>
        <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