Как управлять форматированием параметров и возвращаемых значений для метода веб-службы
Этот раздел посвящен технологии прежних версий. Веб-службы XML и клиенты веб-служб XML должны создаваться с использованием Windows Communication Foundation.
Для форматирования элементов XML, соответствующих параметрам и возвращаемым значениям метода (или атрибуту use), язык описания веб-служб (WSDL) предоставляет два варианта выбора: с кодировкой SOAP и в литеральном стиле SOAP. Платформа .NET Framework управляет этими вариантами в коде с помощью атрибутов. Хотя ASP.NET обеспечивает расширенную архитектуру для управления форматированием XML, порядок сериализации параметров не гарантируется.
Задание форматирования параметра Literal
Примените атрибут SoapDocumentMethod для метода в прокси-классе и задайте для свойства Use значение SoapBindingUse.Literal.
Перечисление SoapBindingUse определяет стили форматирования параметров, доступные веб-службе, созданной с помощью ASP.NET.
[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
Далее следует часть XML запроса SOAP, направляемого в метод веб-службы
DocumentLiteral
. Параметры находятся в пределах элемента 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> <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 для метода в прокси-классе и задайте для свойства Use значение SoapBindingUse.Encoded.
В отличие от стиля форматирования параметра Literal, стиль форматирования параметра Encoded может использоваться совместно с обоими стилями форматирования метода веб-службы. Дополнительные сведения о стилях форматирования метода веб-службы см. в разделе Поддержка форматов 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
Далее следует часть XML запроса SOAP, направляемого в метод службы
DocumentEncoded
. Обратите внимание, что параметры представляются совсем не так, как в стиле форматирования Literal, поскольку они форматируются с использованием правил кодирования, описанных в разделе 5 спецификации SOAP. Особое внимание обратите на параметр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