Как использовать WS-адресацию в WCF и установить заголовок wsa:replyto?
Я вызываю службу BizTalk с помощью WCF. Служба требует, чтобы адрес WSA: replyto был установлен в заголовке SOAP, чтобы сделать "обратный вызов", когда процесс будет завершен.
мы используем контракт-первый подход с автоматически сгенерированным кодом из svcutil (мы не можем "просто" изменить контракт)...
и это невозможно сделать в файл config...
Я видел, что кто - то "переопределяет" некоторые методы, чтобы сделать свой собственный заголовок, но это не пользовательский заголовок это стандарт в протоколе SOAP.
Как добавить WSA: replyto в заголовок (SOAP)?
1 ответов
для вызова службы, которая требует WS-адресации из WCF вам нужно настроить конечную точку клиента для использования привязки, которая ее поддерживает, например привязка wshttpbinding.
затем вы можете установить wsa:ReplyTo
заголовок к определенному URL-адресу в коде клиента через OperationContext.OutgoingMessageHeaders свойства:
using (new OperationContextScope((IContextChannel)channel))
{
OperationContext.Current.OutgoingMessageHeaders.ReplyTo =
new EndpointAddress("http://client/callback");
channel.DoSomething();
}
в этом примере мы ставим wsa:ReplyTo
заголовок к известному URL, где клиент канал прослушивает входящие сообщения обратного вызова от службы.
кроме того, если служба поддерживает его можно использовать элементов wsdualhttpbinding, который имеет встроенную поддержку дуплексная связь через WS-адресацию. В этом случае вы бы установили адрес обратного вызова через элементов wsdualhttpbinding.ClientBaseAddress свойства:
<system.serviceModel>
<bindings>
<wsDualHttpBinding>
<binding clientBaseAddress="http://client/callback" />
</wsDualHttpBinding>
</bindings>
<client>
<endpoint address="http://server/service"
binding="wsDualHttpBinding"
contract="Namespace.Service" />
</client>
</system.serviceModel>