Как объявить, что служба WCF использует обязательные заголовки SOAP?

У меня есть служба WCF, которая использует некоторые настраиваемые заголовки SOAP. Мне удается передать заголовки, но как я могу объявить их обязательными, заставив клиента передавать их в каждом запросе?

Спасибо!


person Alon1980    schedule 15.06.2011    source источник


Ответы (1)


Вам нужен код, который будет проверять наличие заголовков на вашей стороне. Вам также понадобится код, который добавит ваши пользовательские заголовки в WSDL, чтобы все клиенты знали об этих заголовках.

Обе части могут быть достигнуты с помощью MessageContract, где вы определите заголовки и тело. Если вы используете единый контракт в качестве основы для всех своих сообщений, он должен работать, но вам придется проверять заголовки в каждой операции.

Вы также можете переместить код, связанный с заголовками, в настраиваемое поведение и добавить / проверить заголовки в настраиваемом инспекторе сообщений. В этом случае вы также должны вручную добавить описание заголовка в WSDL. Это статья в блоге описывает весь процесс.

person Ladislav Mrnka    schedule 15.06.2011
comment
MessageContract - это хорошо, но ограничивает свободу моих API, поскольку разрешен только один параметр, и мне нужно будет создать собственный класс для каждого API (поскольку все они имеют разные подписи). Другое ваше предложение - это то, что я делаю сейчас, только оно не дает клиенту никаких указаний на то, что службе нужны заголовки SOAP. - person Alon1980; 15.06.2011
comment
Ваша последняя ссылка выглядит как последнее, что нужно сделать - поэтому, если я не получу ответ, который решает эту проблему более надежным и элегантным способом, я потрачу время на тот блог, который вы упомянули. - person Alon1980; 15.06.2011
comment
MessageContract не ограничивает API одним параметром. Он только объединяет все параметры в один класс. Вы получите указание клиента, если ваши заголовки будут частью WSDL. Вы всегда должны проверять на своей стороне, что заголовки были переданы, потому что вы не можете гарантировать, что клиент их отправит. - person Ladislav Mrnka; 15.06.2011
comment
Вы правы, конечно, я хотел сказать, что неудобно, если все мои API имеют разные подписи, но все должны получать одни и те же заголовки SOAP. в этом случае мне нужно создать собственный класс для каждого API - person Alon1980; 15.06.2011