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 參數格式
將 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 參數格式
將 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