Настройка заголовков исходящего SOAP-сообщения
SOAP-заголовки могут использоваться для передачи дополнительной информации, непосредственно не связанной с задачей, решаемой операцией сервиса. В частности, это может быть информация, используемая для проверки прав доступа к сервису. Для этого часто используется стандарт Web Service Security, который определяет набор стандартных SOAP-заголовков для аутентификации и шифрования. Например, SOAP-сервис магазина содержит операцию ДобавитьВКаталог для добавления товара (строка-наименование и число-количество) в каталог. Для этой операции в сервисе реализована проверка доступа через WSS-токен UsernameToken. Тогда для вызова операции клиенту требуется передать сервису SOAP-заголовок с именем пользователя и паролем. Упрощенный фрагмент WSDL-описания сервиса:
<definitions>
    <types>
        <schema>
            <element name="ДобавитьВКаталог" type="tns:ДобавитьВКаталог"/>
            <element name="ДобавитьВКаталогResponse" type="tns:ДобавитьВКаталогResponse"/>
            <element name="Товар" type="tns:Товар"/>
            <complexType name="ДобавитьВКаталог">
                <sequence>
                    <element minOccurs="0" name="arg0" type="tns:Товар"/>
                </sequence>
            </complexType>
            <complexType final="extension restriction" name="Товар">
                <sequence>
                    <element name="Количество" type="int"/>
                    <element minOccurs="0" name="Наименование" type="string"/>
                </sequence>
            </complexType>
            <complexType name="ДобавитьВКаталогResponse">
                <sequence>
                    <element minOccurs="0" name="return" type="string"/>
                </sequence>
            </complexType>
        </schema>
    </types>
    <message name="ДобавитьВКаталог">
        <part element="tns:ДобавитьВКаталог" name="parameters"/>
    </message>
    <message name="ДобавитьВКаталогResponse">
        <part element="tns:ДобавитьВКаталогResponse" name="parameters"/>
    </message>
    <portType name="СервисМагазина">
        <operation name="ДобавитьВКаталог">
            <input message="tns:ДобавитьВКаталог" wsam:Action="ДобавитьВКаталог"/>
            <output message="tns:ДобавитьВКаталогResponse"/>
        </operation>
    </portType>
</definitions>
У клиента КлиентСервисаМагазина генерируется метод ДобавитьВКаталог. Для настройки SOAP-заголовка с именем пользователя и паролем в модуле клиента SOAP-сервиса следует добавить обработчик НастроитьЗаголовкиSoap<ИмяМетодаСервиса>. Обработчик будет вызван при выполнении метода ДобавитьВКаталог, он добавит в запрос SOAP-заголовок с именем пользователя и паролем:
const ПРОСТРАНСТВО_WSS = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
@ВПроекте
структура ЗаголовокТокенПользователя
    знч Пользователь: Строка
    знч Пароль: Строка
;
@Обработчик
метод НастроитьЗаголовкиSoapДобавитьВКаталог(Парам: КлиентСервисаМагазина.Товар?, ЗаписьSoap: ЗаписьSoap_1_1,
    ПараметрЗаголовков: Объект?)
    знч ЗаголовокWss = ЗаписьSoap.СоздатьЗаголовок("Security", ПРОСТРАНСТВО_WSS)
    если ПараметрЗаголовков это ЗаголовокТокенПользователя
        ЗаголовокWss.ЗаписатьНачалоЭлемента("UsernameToken", ПРОСТРАНСТВО_WSS)
        знч ТокенПользователя = ПараметрЗаголовков как ЗаголовокТокенПользователя
        ЗаголовокWss.ЗаписатьНачалоЭлемента("Username", ПРОСТРАНСТВО_WSS)
        ЗаголовокWss.ЗаписатьТекст(ТокенПользователя.Пользователь)
        ЗаголовокWss.ЗаписатьКонецЭлемента()
        ЗаголовокWss.ЗаписатьНачалоЭлемента("Password", ПРОСТРАНСТВО_WSS)
        ЗаголовокWss.ЗаписатьТекст(ТокенПользователя.Пароль)
        ЗаголовокWss.ЗаписатьКонецЭлемента()
        ЗаголовокWss.ЗаписатьКонецЭлемента()
    ;
    ЗаголовокWss.ЗаписатьКонецЭлемента()
;
При вызове метода ДобавитьВКаталог необходимо указать данные, которые требуется записать в SOAP-заголовок. Объект ДанныеТокена передается в обработчик НастроитьЗаголовкиSoapДобавитьВКаталог через параметр ПараметрЗаголовков.
знч КлиентСервиса = новый КлиентСервисаМагазина()
знч НовыйТовар = новый КлиентСервисаМагазина.Товар(Количество, Наименование)
знч ДанныеТокена = новый КлиентСервисаМагазина.ЗаголовокТокенПользователя("User", "Password")
знч ОтветСервиса = КлиентСервиса.ДобавитьВКаталог(НовыйТовар, ДанныеТокена)