Compartir a través de


Cómo: Controlar si los parámetros del método del servicio web están encerrados en un elemento adicional

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.

Los parámetros o valor devuelto para un método de servicio Web se puede encapsular automáticamente dentro de un elemento XML primario dentro del elemento Body de un mensaje SOAP o se enlace directamente a los elementos part de mensaje en un documento del Lenguaje de descripción de servicios Web (WSDL). .NET Framework hace referencia a estas dos opciones, respectivamente, como ajustada y desnuda y los controla mediante los atributos.

Para especificar que los parámetros se encapsulan dentro de un elemento XML

  1. Aplique un atributo SoapDocumentMethod al método en la clase de proxy que llama al método de servicio Web aplicable, estableciendo la propiedad ParameterStyle como Wrapped.

    El siguiente ejemplo de código establece la propiedad ParameterStyle como Wrapped. También establece el estilo de formato de los parámetros como Literal.

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

    La parte XML de la solicitud SOAP encapsula los parámetros en un elemento denominado de forma predeterminada después del método de servicio Web.

    <?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>
    

    La parte XML de la respuesta de SOAP encapsula los parámetros out para el método de servicio Web, incluido el resultado dentro de un elemento. El nombre del elemento que encapsulado, de forma predeterminada, es el nombre del método de servicio Web con Response anexado al mismo.

    <?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>
        <DocumentWrappedLiteralResponse xmlns="https://www.contoso.com">
          <DocumentWrappedLiteralResult>string
          </DocumentWrappedLiteralResult>
        </DocumentWrappedLiteralResponse>
      </soap:Body>
    </soap:Envelope>
    

Para especificar que los parámetros siguen directamente el elemento Body

  1. Aplique un atributo SoapDocumentMethod al método en la clase de proxy que llama al método de servicio Web aplicable, estableciendo la propiedad ParameterStyle como Bare.

    El ejemplo siguiente, que fue generado por Wsdl.exe, establece ParameterStyle como Bare, además de establecer el estilo de formato de los parámetros en Literal. Puesto que el espacio de nombres no se puede especificar en un elemento que encapsula todos los parámetros, se debe especificar individualmente el espacio de nombres para cada parámetro y valor devuelto. Para hacer esto, aplique XmlElementAttribute a cada parámetro y al valor devuelto y establezca la propiedad Namespace.

    [SoapDocumentMethod(
         "https://www.contoso.com/DocumentBareLiteral",
         Use=SoapBindingUse.Literal,
         ParameterStyle=SoapParameterStyle.Bare)]
    [return: XmlElement(Namespace="https://www.contoso.com",                    IsNullable=true)]
    public string DocumentBareLiteral(
       [XmlElement(Namespace="https://www.contoso.com",
                         IsNullable=true)] 
       Address1 MyAddress, 
       [XmlElement(Namespace="https://www.contoso.com",
                IsNullable=false)] 
       bool useZipPlus4) {
    
    <SoapDocumentMethod( _
         https://www.contoso.com/DocumentBareLiteral", _
         Use:=SoapBindingUse.Literal, _
         ParameterStyle:= SoapParameterStyle.Bare)> _
    Public Function DocumentBareLiteral( _
       ByVal <XmlElement([Namespace]:="https://www.contoso.com", _
                          IsNullable:=true)> _
       MyAddress As Address1, _
       ByVal <XmlElement([Namespace]:="https://www.contoso.com", _
                          IsNullable:=false)> _
       useZipPlus4 As Boolean) _
       As <XmlElement([Namespace]:="https://www.contoso.com", _
                      IsNullable:=true)> _
       String
    

    Los elementos XML a los que están asignados los parámetros directamente dentro de la solicitud SOAP siguen el elemento Body, cada uno especificando un espacio de nombres.

    <?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>
        <MyAddress xmlns="https://www.contoso.com">
          <Street>string</Street>
          <City>string</City>
          <Zip>string</Zip>
        </MyAddress>
        <useZipPlus4 xmlns="https://www.contoso.com">boolean</useZipPlus4>
      </soap:Body>
    </soap:Envelope>
    

    Los parámetros out, incluido el valor devuelto, están asignados a los elementos XML que siguen el elemento Body dentro de la respuesta de SOAP. De forma predeterminada, el nombre del elemento del valor devuelto es el nombre del método de servicio Web con un sufijo Result anexado al mismo.

    <?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>
        <DocumentBareLiteralResult xmlns="https://www.contoso.com">
           string</DocumentBareLiteralResult>
      </soap:Body>
    </soap:Envelope>
    

Vea también

Referencia

SoapDocumentMethodAttribute
SoapRpcMethodAttribute

Otros recursos

Personalizar el formato de mensajes SOAP