Comment : contrôler si les paramètres de méthode de service Web sont joints dans un élément supplémentaire

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.

Les paramètres ou la valeur de retour pour une méthode de service Web peuvent être encapsulés automatiquement dans un élément XML parent dans l'élément Body d'un message SOAP ou liés directement aux éléments part du message dans un document WSDL (Web Services Description Language). Le .NET Framework se réfère à ces deux choix comme respectivement "encapsulé" et "nu" et les contrôle à l'aide d'attributs.

Pour spécifier que les paramètres sont encapsulés dans un élément XML

  1. Appliquez un attribut SoapDocumentMethod à la méthode dans la classe proxy qui appelle la méthode de service Web applicable, en affectant à la propriété ParameterStyle la valeur Wrapped.

    L'exemple de code suivant affecte au ParameterStyle la valeur Wrapped. Il affecte également au style de mise en forme des paramètres la valeur 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 partie XML de la demande SOAP encapsule les paramètres dans un élément nommé par défaut d'après la méthode de service 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 partie XML de la réponse SOAP encapsule les paramètres de out pour la méthode de service Web, y compris le résultat à l'intérieur d'un élément. Le nom de l'élément d'encapsulation par défaut est le nom de la méthode de service Web auquel est ajouté 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>
    

Pour spécifier que les paramètres suivent directement l'élément Body

  1. Appliquez un attribut SoapDocumentMethod à la méthode dans la classe proxy qui appelle la méthode de service Web applicable, en affectant à la propriété ParameterStyle la valeur Bare.

    L'exemple suivant, généré par Wsdl.exe, affecte au ParameterStyle la valeur Bare, tout en affectant au style de mise en forme des paramètres la valeur Literal. L'espace de noms ne pouvant pas être spécifié dans un élément qui encapsule tous les paramètres, l'espace de noms doit être spécifié individuellement pour chaque paramètre et valeur de retour. Vous pouvez le faire en appliquant un XmlElementAttribute à chaque paramètre et à la valeur de retour et en définissant la propriété 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
    

    Les éléments XML auxquels les paramètres sont mappés dans la demande SOAP suivent directement l'élément Body, chacun spécifiant un espace de noms.

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

    Les paramètres out, y compris la valeur de retour, sont mappés aux éléments XML qui suivent l'élément Body dans la réponse SOAP. Par défaut, le nom de l'élément de valeur de retour est le nom de la méthode de service Web avec le suffixe 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>
    

Voir aussi

Référence

SoapDocumentMethodAttribute
SoapRpcMethodAttribute

Autres ressources

Personnalisation de la mise en forme de messages SOAP