如何:控制 Web 服务方法的整体 SOAP 正文格式设置
本主题专门介绍一项旧有技术。现在应通过使用以下链接来创建 XML Web 服务和 XML Web 服务客户端: Windows Communication Foundation.
对于整体 SOAP 正文格式设置或样式,Web 服务描述语言 (WSDL) 提供了两个选项:RPC 和文档。.NET Framework 在代码中使用特性来控制这两个选项。
指定 Document 格式设置样式
将 SoapDocumentMethod 特性或 SoapRpcMethod 特性应用于调用适用的 Web 服务方法的代理类中的方法。
使用 ASP.NET 创建的 Web 服务同时支持 Literal 和 Encoded 参数格式设置样式。下面的示例将 Document 方法格式设置样式与 Literal 参数格式设置样式组合起来。
[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
使用 Document 格式设置样式时,在定义 SOAP 请求和 SOAP 响应的服务说明中定义 XSD 架构。下面是从用于
DocumentWrappedLiteral
Web 服务方法的 SOAP 请求的服务说明中提取的摘录。由于DocumentWrappedLiteral
Web 服务方法的第一个参数是一个类,并且指定了 Literal 参数格式设置样式,因此为address
类型创建一个 XSD 架构。<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>
使用在服务说明中定义的 XSD 架构时,后面将是
DocumentWrappedLiteral
服务方法的 SOAP 请求的 XML 部分。请注意,在 SOAP 请求中 Body 元素下的 XML 元素与 XSD 架构中定义的元素匹配。<?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>
指定 RPC 格式设置样式
将 SoapRpcMethod 特性应用于调用适用的 Web 服务方法的代理类中的方法。
[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
在前面的示例中,在
Rpc
方法的 SOAP 请求或 SOAP 响应的服务说明中未严格定义 XSD 架构,而只定义了构成它们的各部分。因此,请查看Rpc
方法的 SOAP 请求,注意参数封装在一个元素内,它们使用 Encoded 参数格式设置来编码。<?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>
另请参见
参考
SoapDocumentMethodAttribute
SoapRpcMethodAttribute