Condividi tramite


Procedura: controllare se i parametri del metodo del servizio Web sono racchiusi in un elemento supplementare.

Questo argomento è specifico di una tecnologia legacy. Servizi Web XML e client di servizi Web XML devono essere creati attualmente tramite Windows Communication Foundation.

I parametri o il valore restituito per un metodo del servizio Web possono essere incapsulati automaticamente all'interno di un elemento XML padre nell'elemento Body di un messaggio SOAP, oppure associati direttamente agli elementi di messaggio part in un documento WSDL (Web Services Description Language). .NET Framework fa riferimento a queste due possibilità, rispettivamente, come wrapped o bare e ne esercita il controllo mediante attributi.

Per specificare l'incapsulamento dei parametri all'interno di uno elemento XML

  1. Applicare un attributo SoapDocumentMethod al metodo nella classe proxy eseguendo la chiamata al metodo del servizio Web mediante impostazione della proprietà ParameterStyle su Wrapped.

    Nell'esempio di codice seguente la proprietà ParameterStyle viene impostata su Wrapped. Lo stile di formattazione dei parametri viene inoltre impostato su 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 della richiesta SOAP incapsula i parametri in un elemento denominato per impostazione predefinita in base al metodo del servizio 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 della risposta SOAP incapsula i parametri out per il metodo del servizio Web , inclusi i risultati contenuti all'interno di un elemento. Per impostazione predefinita, il nome dell'elemento di incapsulamento è il nome del metodo del servizio Web, cui si aggiunge Response.

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

Per indicare che i parametri sono direttamente successivi all'elemento Body

  1. Applicare un attributo SoapDocumentMethod al metodo nella classe proxy eseguendo la chiamata al metodo del servizio Web mediante impostazione della proprietà ParameterStyle su Bare.

    L'esempio seguente, generato da Wsdl.exe imposta ParameterStyle su Bare e lo stile di formattazione dei parametri su Literal. Poiché lo spazio dei nomi non può essere specificato in un elemento che incapsula tutti i parametri, deve essere indicato singolarmente per ogni parametro e valore restituito. Per eseguire questa operazione, applicare un attributo XmlElementAttribute a ogni parametro e al valore restituito nonché impostare la proprietà 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
    

    Gli elementi XML a cui sono associati i parametri all'interno della richiesta SOAP sono direttamente successivi all'elemento Body e ognuno di essi specifica uno spazio dei nomi.

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

    I parametri out, incluso il valore restituito, sono associati agli elementi XML successivi all'elemento Body all'interno della risposta SOAP. Per impostazione predefinita, il nome dell'elemento del valore restituito è il nome del metodo del servizio Web con il suffisso Result.

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

Vedere anche

Riferimento

SoapDocumentMethodAttribute
SoapRpcMethodAttribute

Altre risorse

Personalizzazione della formattazione dei messaggi SOAP