Как управлять общим форматированием текста сообщений SOAP для метода веб-службы
Этот раздел посвящен технологии прежних версий. Веб-службы XML и клиенты веб-служб XML должны создаваться с использованием Windows Communication Foundation.
Язык WSDL предоставляет на выбор две возможности для общего форматирования текста сообщений SOAP, или стиля: RPC и Document. Платформа .NET Framework управляет этими вариантами в коде с помощью атрибутов.
Задание стиля форматирования Document
Примените атрибут SoapDocumentMethod или атрибут SoapRpcMethod к методу в прокси-классе, который вызывает подходящий метод веб-службы.
Веб-службы, созданные с применением ASP.NET, поддерживают использование обоих стилей форматирования параметров — 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
В описании службы определена схема XSD, задающая как запрос, так и ответ SOAP. Используется стиль форматирования Document. Ниже приведен отрывок описания службы с определением запроса SOAP для метода веб-службы
DocumentWrappedLiteral
. Так как первым параметром для метода веб-службыDocumentWrappedLiteral
является класс и задан стиль форматирования параметров Literal, схема XSD создается для типаaddress
.<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, определенной в описании службы, часть XML, представляющая запрос SOAP для метода службы
DocumentWrappedLiteral
, будет такой, как показано далее. Обратите внимание, что элементы XML, следующие за элементом Body в запросе SOAP, соответствуют элементам, определенным в схеме 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 к методу в прокси-классе, вызывающему нужный метод веб-службы.
[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
В предыдущем примере в описании службы нет строгого определения схемы XSD ни для запроса, ни для ответа SOAP методу
Rpc
, скорее определены содержащие их фрагменты. Поэтому посмотрите на запрос SOAP для методаRpc
, обратите внимание, что параметры заключены в один элемент и кодированы с использованием форматирования параметров 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