Сообщение WCF: протокол в изменениях элемента To

У меня есть служба WCF для использования в.NET. В соответствии с требованием элемент Action в заголовке должен быть "http://abc", а элемент To должен быть "ws://xyz", чтобы служба распознала и ответила на запрос. Однако мыло-действие операции пустое в WSDL и не может быть изменено.

Моя сервисная конфигурация построена программно:

  • привязка кодировки текстовых сообщений с версией конверта Soap11 и версией адресации WSAddressing10
  • нет безопасности
  • http транспортная привязка

Я обнаружил, что для выполнения этого требования была выбрана настройка "ws://xyz" в качестве URL-адреса конечной точки, а для параметра Request.Headers.Action задано значение "http://abc" в BeforeSendRequest с использованием инспектора сообщений, добавленного с использованием поведения конечной точки, присоединенного к конечной точке. Затем я также прикрепляю ClientViaBehavior с URL-адресом "http://abc".

На моей машине разработки это вызывает по мере необходимости

<a:Action>http://abc</a:Action>
<a:To>ws://xyz</a:To>

Однако на тестовом сервере он генерирует

<a:Action>http://abc</a:Action>
<a:To>http://xyz</a:To>

Я не знаю точную конфигурацию сервера, но я считаю, что это сервер Windows, как и моя коробка разработки. Генерирует ли один и тот же код разные сообщения на двух разных машинах или как еще мне этого добиться? Я должен также сказать, что это работало отлично в течение нескольких недель и прекратилось в прошлый понедельник.

Позже я обнаружил следующее: на тестовом сервере установлена ​​.NET 4.5, а также другая машина, на которой я его пробовал (также не удалось). На машине разработчика, где она работает нормально, установлена ​​только.NET 4.0, которая предполагает, что она может иметь к этому какое-то отношение. Однако у меня нет никаких доказательств того, что это вызвано.NET 4.5, поскольку он был установлен за несколько недель до появления проблемы. Более того, не было никаких обновлений Windows, так как он перестал работать! Я также пытался установить элемент To в моей реализации ClientMessageInspector, но протокол все равно переворачивается на http.

1 ответ

Я думаю, что BeforeSendRequest не вызывается из-за неправильной настройки привязок вашего сервиса. Проверьте, добавили ли вы конфигурацию расширения к конечным точкам службы, поведение которых вы хотите.

Другие вопросы по тегам