Поделиться через


Как управлять форматированием параметров и возвращаемых значений для метода веб-службы

Этот раздел посвящен технологии прежних версий. Веб-службы XML и клиенты веб-служб XML должны создаваться с использованием Windows Communication Foundation.

Для форматирования элементов XML, соответствующих параметрам и возвращаемым значениям метода (или атрибуту use), язык описания веб-служб (WSDL) предоставляет два варианта выбора: с кодировкой SOAP и в литеральном стиле SOAP. Платформа .NET Framework управляет этими вариантами в коде с помощью атрибутов. Хотя ASP.NET обеспечивает расширенную архитектуру для управления форматированием XML, порядок сериализации параметров не гарантируется.

Задание форматирования параметра Literal

  1. Примените атрибут 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

  1. Примените атрибут 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

Другие ресурсы

Настройка форматирования сообщения SOAP