Пользовательские заголовки в WCF - PullRequest
1 голос
/ 07 августа 2009

Я хочу добавить определенные пользовательские заголовки в мой wsdl для входящего мыльного сообщения, поэтому я добавил необходимые теги в узел заголовка файла web.config, как показано ниже:

 <headers>
   <Tag>Value</Tag>
 </headers>

Тем не менее, это работает нормально, если «Значение» в пользовательском теге установлено на «Значение», когда я изменяю это значение, служба выдает его, выдавая приведенную ниже ошибку;

'DestinationUnreachable - Сообщение с To' http://localhost:3537/Service1.svc' не может быть обработано в получателе из-за несовпадения AddressFilter в EndpointDispatcher. Убедитесь, что конечные адреса отправителя и получателя совпадают. '

Так как я могу указать значения переменных для фактического значения между тегами ?? как в шаблонах URL, т.е.

 <headers>
   <Tag>{variable value here}</Tag>
 </headers>

Есть какие-нибудь идеи или я использую нестандартные заголовки? Я не хочу использовать messageContract, так как мы используем мыло в стиле RPC поверх стиля документа.

Также еще одна любопытная вещь: для того, чтобы сообщение было действительным, пользовательский элемент, определенный в элементе заголовка, должен указать атрибут IsReferenceParameter = "true" с пространством имен ws-адресации, в противном случае он вызывает вышеуказанную ошибку?

 <Tag a:IsReferenceParameter="true">Value</Tag>

Может кто-нибудь объяснить мне это?

Заранее спасибо

Jon

1 Ответ

2 голосов
/ 08 августа 2009

Я не могу объяснить конкретный вопрос, который у вас есть, но обычно вы добавляете пользовательские заголовки к вызовам WCF в коде, часто используя поведение, а не из web.config. Не уверен, что это даже работает, правда.

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

Но если вы действительно хотите использовать заголовки SOAP в своих сообщениях, я думаю, что вам лучше всего использовать контракты на сообщения. Почему вы не можете или не хотите использовать контракты на сообщения? Это действительно единственная цель контрактов сообщений: определение явного макета сообщения SOAP, включая пользовательские заголовки.

См. Некоторые статьи и сообщения в блоге по теме:

В этом сообщении в блоге здесь показано, как внедрить пользовательские заголовки SOAP в генерируемый WSDL путем реализации пользовательского класса "WsdlExporter" - может быть, вам это подходит?

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

Марк

...