Как обрабатывать неизвестные заголовки SOAP

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

Клиент веб-службы может отправить методу веб-службы запрос SOAP (с заголовком SOAP), ожидаемый этой веб-службой, но, возможно, не определенный в ней явным образом. В этом случае необходимо определить, понятна ли семантика заголовка SOAP (и обработана ли она), поскольку в спецификации SOAP указано, что если атрибут mustUnderstand заголовка SOAP имеет значение true, возникает исключение. Подробные сведения об обработке требуемых клиентом заголовков SOAP см. в разделе Обработка заголовков SOAP, требуемых клиентом XML-веб-службы.

Обработка неизвестных заголовков SOAP, получаемых от клиента веб-службы

  1. Добавьте в класс, реализующий веб-службу, переменную-член типа SoapUnknownHeader или SoapHeader либо массив любого из этих типов для обработки нескольких неизвестных заголовков SOAP.

    Если объявить этот тип как массив или один экземпляр типа SoapUnknownHeader, обеспечивается дополнительное преимущество: SoapUnknownHeader имеет свойство Element. Свойство Element принадлежит к типу XmlElement. Оно представляет документ XML для элемента Header запроса SOAP или ответа SOAP. Таким образом, метод веб-службы может определять имя заголовка SOAP, а также данные, передаваемые заголовком SOAP, путем опрашивания свойства Element.

    public class MyWebService {
        public SoapUnknownHeader[] unknownHeaders;
    
    Public Class MyWebService
        Public unknownHeaders() As SoapUnknownHeader
    
  2. Примените атрибут SoapHeader для каждого метода веб-службы, который должен обрабатывать все неизвестные заголовки SOAP.

    
        [WebMethod]
        [SoapHeader("unknownHeaders")]
        public string MyWebMethod()
    
        <WebMethod, _
         SoapHeader("unknownHeaders") > _
        Public Function MyWebMethod() As String
    
    
  3. Добавьте код, определяющий возможность обработки неизвестных заголовков SOAP.

    Если переменная-член принадлежит к типу SoapUnknownHeader, метод веб-службы может определять имя заголовка SOAP, а также данные, передаваемые заголовком SOAP, путем опрашивания свойства Element. Свойство Name свойства Element определяет имя заголовка SOAP.

    
           foreach (SoapUnknownHeader header in unknownHeaders) 
           {
             // Check to see if this a known header.
             if (header.Element.Name == "MyKnownHeader")
    
           Dim header As SoapUnknownHeader       
           For Each header In unknownHeaders
             ' Check to see if this is a known header.
             If (header.Element.Name = "MyKnownHeader") Then
    
  4. Присвойте значение true свойству DidUnderstand переменной-члена, обозначающей неизвестный заголовок SOAP, если известно, как именно следует обрабатывать определенный заголовок SOAP.

    Если метод веб-службы обрабатывает неизвестный заголовок SOAP и не задает свойству DidUnderstand значение true, возможна выдача исключения SoapHeaderException. Дополнительные сведения см. в разделе Обработка заголовков SOAP, требуемых клиентом XML-веб-службы

             // Check to see if this is a known header.
             if (header.Element.Name == "MyKnownHeader")
                   header.DidUnderstand = true;
             else
                 // For those headers that cannot be 
                 // processed, set DidUnderstand to false.
                 header.DidUnderstand = false;
             }
    
             ' Check to see if this a known header.
             If (header.Element.Name = "MyKnownHeader") Then
                   header.DidUnderstand = True
             Else
                 ' For those headers that cannot be 
                 ' processed, set DidUnderstand to false.
                 header.DidUnderstand = False
             End If
    
    hf2y839a.note(ru-ru,VS.100).gifПримечание
    Свойство DidUnderstand используется веб-службами, созданными с помощью ASP.NET, для взаимодействия с методом веб-службы. Оно не входит в спецификацию SOAP. Его значение не указывается ни в одной части запроса SOAP и ответа SOAP.

    hf2y839a.note(ru-ru,VS.100).gifПримечание
    Когда клиент веб-службы создает прокси-класс с помощью инструмента языка описания веб-службы (Wsdl.exe) и веб-служба определяет переменную-член, обозначающую заголовок SOAP, с помощью типа SoapUnknownHeader, в прокси-класс не добавляется никаких ссылок на заголовок SOAP. Если требуется, чтобы клиент веб-службы мог добавить заголовок SOAP в запрос SOAP, он должен изменить прокси-класс, добавив в него переменную-член и применив атрибут SoapHeader к методу, вызывающему соответствующий метод веб-службы Web.

См. также

Справочник

SoapHeader
SoapHeaderAttribute
SoapUnknownHeader
SoapHeaderException

Основные понятия

Создание клиентов XML-веб-службы

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

Использование заголовков SOAP
XML-веб-службы с использованием ASP.NET