共用方式為


HOW TO:針對 Web 服務方法控制參數及傳回值格式

本主題專門說明舊有技術。 應該使用下列建立 XML Web Service 及 XML Web Service 用戶端: Windows Communication Foundation.

對於對應到方法參數及傳回值 (或 Use) 的 XML 項目格式,Web 服務描述語言 (WSDL) 會提供兩種選擇:SOAP 編碼 (Encoded) 和常值 (Literal)。.NET Framework 可以在程式碼中使用屬性控制這些選擇。雖然 ASP.NET 提供了控制 XML 格式化方式所需的完整架構,但是不保證一定按照參數序列化的順序進行格式化。

若要指定 Literal 參數格式

  1. SoapDocumentMethod 屬性套用至 Proxy 類別中的方法,並將 Use 屬性設定為 SoapBindingUse.Literal

    SoapBindingUse 列舉 (Enumeration) 會指定使用 ASP.NET 建立之 Web 服務可用的參數格式樣式。

    [SoapDocumentMethod(
        "https://www.contoso.com/DocumentLiteral",
        RequestNamespace="https://www.contoso.com",
        ResponseNamespace="https://www.contoso.com",
        Use=SoapBindingUse.Literal)]
    public string DocumentLiteral(Address1 address, bool useZipPlus4) {
    
    <SoapDocumentMethod( _
       "https://www.contoso.com/DocumentLiteral", _
       RequestNamespace:="https://www.contoso.com", _
       ResponseNamespace:="https://www.contoso.com", _
       Use:=SoapBindingUse.Literal)>  _
    Public Function DocumentLiteral(ByVal address As Address1, _
                             ByVal useZipPlus4 As Boolean) As String
    

    要傳送給 DocumentLiteral Web 服務方法之 SOAP 要求的 XML 部分如下。參數參考 XSD 結構描述時,是放在 Body 項目內,並且編碼為獨立的 XML 文件。

    <?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>
        <DocumentLiteral xmlns="https://www.contoso.com">
          <address>
            <Street>One Microsoft Way</Street>
            <City>Redmond</City>
            <Zip>98052</Zip>
          </address>
          <useZipPlus4>True</useZipPlus4>
        </DocumentLiteral>
      </soap:Body>
    </soap:Envelope>
    

若要指定 Encoded 參數格式

  1. SoapDocumentMethod 屬性或 SoapRpcMethod 屬性套用至 Proxy 類別中的方法,並將 Use 屬性設定為 SoapBindingUse.Encoded

    Literal 參數格式樣式不同,Encoded 參數格式樣式可以和這兩種 Web 服務方法格式樣式一起使用。如需 Web 服務方法格式樣式的詳細資訊,請參閱 SOAP 格式的 .NET Framework 支援

    [SoapDocumentMethod("https://www.contoso.com/DocumentEncoded",
                        RequestNamespace="https://www.contoso.com",
                        ResponseNamespace="https://www.contoso.com",
                        Use=SoapBindingUse.Encoded)]
    public string DocumentEncoded(Address address, bool useZipPlus4) {
    
    <SoapDocumentMethod("https://www.contoso.com/DocumentEncoded", _
                        RequestNamespace:="https://www.contoso.com", _
                        ResponseNamespace:="https://www.contoso.com", _
                        Use:=SoapBindingUse.Encoded)>  _
    Public Function DocumentEncoded(ByVal address As Address, _ 
                      ByVal useZipPlus4 As Boolean) As String
    

    要傳送給 DocumentEncoded 服務方法之 SOAP 要求的 XML 部分如下。請注意,因為會使用 SOAP 規格第 5 節中所述的編碼規則進行格式化,所以參數的表示方式和 Literal 格式樣式大為不同。尤其要注意 address 參數,它並非簡單資料型別。

    <?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/">
        <tnsTypes:DocumentEncoded>
          <address href="#1" />
          <useZipPlus4>boolean</useZipPlus4>
        </tnsTypes:DocumentEncoded>
        <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>
    

另請參閱

參考

SoapDocumentMethodAttribute
SoapRpcMethodAttribute

其他資源

自訂 SOAP 訊息格式