
В Candidate Recommendation спецификации SOAP 1.2 (часть 1, раздел 2.4) устранены недомолвки и четко определена семантика обработки обязательных заголовков:
Прел полагается, что обязательные блоки SCAP-;sat с.':звкуй влияют на семантику остальных блоков SUAР-хи'о.'нжкоп или SO.AP-.j/ieметоп Body. Поэтому узел [обязательно] обрабатывает каждый адресованный ему обязательный блок или отказывается от обработки всего SOAP-cnofnucin»i. генерируя ошибку (см. разделы 2.6 «Processing SOAP Messages» и 5.4 «SOAP Fault»).
Внутренняя инфраструктура Web-сервисов ASP.NET предоставляет модель для операций над заголовками SOAP-сообщений. Увы, она допускает обработку сообщения, даже если в нем содержится обязательный заголовок, который не поддерживается или не распознается целевым методом. И хотя ошибка все же генерируется, но лишь после того, как будет выполнен код Web-сервиса.
Обязательные заголовки в ASP.NET
Когда диспетчер сообщений (message dispatcher) Web-сервисов ASP.NET разбирает сообщение, он использует содержимое элемента Body в качестве входных параметров для вызова метода. Перед вызовом содержимое элемента Header (при его наличии) может быть дееериализонако в поля или свойства целевого объекта. В ходе работы метод может просматривать эти поля или свойства, определяя заголовки сообщения. Сопоставление заголовков полям или свойствам не обязательно и контролируется значением атрибута System.Web.Services. Protocols. Soap HeaderAttribute (рис. 2).
Рис. 2, Сопоставление заголовков полям или свойствам

Метод Ваг помечен атрибутом [SoapHeader], который ссылается на поле с именем foo. Механизм отражения (reflection) позволяет диспетчеру сообщений определить, что foo — это экземпляр Foo подкласса System,Web, Services, Protoco Is.Soap Header. Диспетчер знает, что все типы, производные от SoapHeader, представляют XML-элементы, которые могут располагаться в заголовке сообщения
