Vorgehensweise: Steuern, ob Webdienst-Methodenparameter in ein zusätzliches Element eingeschlossen werden

Dieses Thema bezieht sich auf eine veraltete Technologie. XML-Webdienste und XML-Webdienstclients sollten nun mithilfe der folgenden Technologie erstellt werden: Windows Communication Foundation.

Die Parameter oder Rückgabewerte für eine Webdienstmethode können automatisch innerhalb des Body-Elements einer SOAP-Nachricht in ein übergeordnetes XML-Element gekapselt oder direkt an part-Nachrichtenelemente in einem WSDL-Dokument (Web Services Description Language) gebunden werden. In .NET Framework werden die beiden als umschlossen (wrapped) bzw. als rein (bare) bezeichneten Möglichkeiten über Attribute gesteuert.

So geben Sie an, dass Parameter innerhalb eines XML-Elements gekapselt werden

  1. Wenden Sie ein SoapDocumentMethod-Attribut auf die Methode in der Proxyklasse an, die die entsprechende Webdienstmethode aufruft, und legen Sie die ParameterStyle-Eigenschaft auf Wrapped fest.

    Im folgenden Codebeispiel wird ParameterStyle auf Wrapped festgelegt. Außerdem wird der Parameterformatierungsstil auf Literal festgelegt.

    [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
    

    Der XML-Abschnitt der SOAP-Anforderung kapselt die Parameter in einem Element, das standardmäßig nach der Webdienstmethode benannt wird.

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

    Der XML-Abschnitt der SOAP-Antwort kapselt die out-Parameter für die Webdienstmethode, einschließlich des Ergebnisses, in einem Element. Der Name des kapselnden Elements entspricht standardmäßig dem Namen der Webdienstmethode, wobei Response an den Namen angehängt ist.

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

So geben Sie an, dass Parameter dem Body-Element direkt folgen

  1. Wenden Sie ein SoapDocumentMethod-Attribut auf die Methode in der Proxyklasse an, die die entsprechende Webdienstmethode aufruft, und legen Sie die ParameterStyle-Eigenschaft auf Bare fest.

    Im folgenden, von Wsdl.exe generierten Beispiel wird ParameterStyle auf Bare und der Parameterformatierungsstil auf Literal festgelegt. Da der Namespace nicht in einem Element angegeben werden kann, das alle Parameter kapselt, muss der Namespace einzeln für jeden Parameter und Rückgabewert angegeben werden. Dies kann dadurch erfolgen, dass Sie auf jeden Parameter und den Rückgabewert XmlElementAttribute anwenden und die Namespace-Eigenschaft festlegen.

    [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
    

    Die XML-Elemente, denen die Parameter innerhalb der SOAP-Anforderung zugeordnet werden, folgen dem Body-Element direkt, wobei jedes einen Namespace angibt.

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

    Die out-Parameter (einschließlich des Rückgabewerts) werden den XML-Elementen zugeordnet, die dem Body-Element innerhalb der SOAP-Antwort folgen. Der Elementname des Rückgabewerts ist standardmäßig der Name der Webdienstmethode mit einem Result-Suffix.

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

Siehe auch

Verweis

SoapDocumentMethodAttribute
SoapRpcMethodAttribute

Weitere Ressourcen

Anpassen der Formatierung von SOAP-Nachrichten