Freigeben über


Gewusst wie: Steuern der allgemeinen SOAP-Textformatierung für eine Webdienstmethode

Für eine allgemeine SOAP-Textformatierung (oder einen allgemeinen Stil) stellt WSDL (Web Services Description Language) zwei Auswahlmöglichkeiten bereit: RPC und document. .NET Framework steuert diese Auswahl mithilfe von Attributen im Code.

So geben Sie einen Document-Formatierungsstil an

  • Wenden Sie ein SoapDocumentMethod-Attribut auf die Methode in der Proxyklasse an, die die entsprechende Webdienstmethode aufruft.

    Mit dem Document-Formatierungsstil können Webdienste, die mit ASP.NET-Unterstützung erstellt wurden, sowohl den Literal-Parameterformatierungsstil als auch den Encoded-Parameterformatierungsstil verwenden. Das folgende Beispiel kombiniert den Formatierungsstil der Document-Methode mit dem Literal-Parameterformatierungsstil.

    [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
    

    Mit dem Document-Formatierungsstil wird ein XSD-Schema innerhalb der Dienstbeschreibung definiert, die sowohl die SOAP-Anforderung als auch die SOAP-Antwort definiert. Der folgende Code ist ein Auszug aus der Dienstbeschreibung für die SOAP-Anforderung der DocumentWrappedLiteral-Webdienstmethode. Da der erste Parameter für die DocumentWrappedLiteral-Webdienstmethode eine Klasse ist und der Literal-Parameterformatierungsstil angegeben wurde, wird ein XSD-Schema für den address-Typ erstellt.

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

    Wenn das XSD-Schema in der Dienstbeschreibung definiert ist, folgt der XML-Abschnitt der SOAP-Anforderung für die DocumentWrappedLiteral-Dienstmethode. Beachten Sie, dass die XML-Elemente unter dem Body-Element in der SOAP-Anforderungen mit den im XSD-Schema definierten Elementen übereinstimmen.

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

So geben Sie einen RPC-Formatierungsstil an

  • Wenden Sie ein SoapRpcMethod-Attribut auf die Methode in der Proxyklasse an, die die entsprechende Webdienstmethode aufruft.

    [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
    

    Im vorhergehenden Beispiel ist das XSD-Schema in der Dienstbeschreibung für die SOAP-Anforderung oder die SOAP-Antwort für die Rpc-Methode nicht streng definiert; es sind nur die Teile definiert, aus denen sie bestehen. Sehen Sie sich daher die SOAP-Anforderung für die Rpc-Methode an, und beachten Sie, dass die Parameter innerhalb eines Elements gekapselt und mit der Encoded-Parameterformatierung codiert sind.

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

Siehe auch

Referenz

SoapDocumentMethodAttribute
SoapRpcMethodAttribute

Weitere Ressourcen

Anpassen der Formatierung von SOAP-Nachrichten

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.