Comment : contrôler la mise en forme globale du corps SOAP pour une méthode de service Web

Cette rubrique est spécifique à une technologie existante. Les services Web XML et les clients du service Web XML doivent à présent être créés à l'aide de Windows Communication Foundation.

Pour la mise en forme globale du corps SOAP ou le style, WSDL (Web Services Description Language) offre deux choix : RPC et document. Le .NET Framework contrôle ces choix dans le code à l'aide d'attributs.

Pour spécifier un style de mise en forme Document

  1. Appliquez un attribut SoapDocumentMethod ou SoapRpcMethod à la méthode dans la classe proxy qui appelle la méthode de service Web applicable.

    Les services créés à l'aide d'ASP.NET acceptent à la fois les styles de mise en forme des paramètres Literal et Encoded. L'exemple suivant combine le style de mise en forme de la méthode Document au style de mise en forme des paramètres 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
    

    Avec le style de mise en forme Document, un schéma XSD est défini dans la description de service qui définit à la fois la demande SOAP et la réponse SOAP. Les éléments suivants sont un extrait de la description de service pour la demande SOAP pour la méthode de service Web DocumentWrappedLiteral. Étant donné que le premier paramètre de la méthode de service Web DocumentWrappedLiteral est une classe et que le style de mise en forme des paramètres Literal a été spécifié, un schéma XSD est créé pour le type 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>
    

    Sur la base du schéma XSD défini dans la description de service, la partie XML de la demande SOAP de la méthode de service DocumentWrappedLiteral suit. Notez que les éléments XML sous l'élément Body dans la demande SOAP correspondent aux éléments définis dans le schéma 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>
    

Pour spécifier le style de mise en forme RPC

  1. Appliquez un attribut SoapRpcMethod à la méthode dans la classe proxy qui appelle la méthode de service Web applicable.

    [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 schéma XSD n'est pas défini strictement dans la description de service pour la demande SOAP ou la réponse SOAP à la méthode Rpc dans l'exemple précédent, mais juste les parties qui les comprennent. Regardez donc la demande SOAP de la méthode Rpc, en notant que les paramètres sont encapsulés à l'intérieur d'un élément et codés à l'aide de la mise en forme de paramètres 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> 
    

Voir aussi

Référence

SoapDocumentMethodAttribute
SoapRpcMethodAttribute

Autres ressources

Personnalisation de la mise en forme de messages SOAP