11

我正在使用 WCF 调用 BizTalk 服务。该服务需要在 SOAP 标头中设置 wsa:replyto 地址,以便在处理完成时能够进行“回调”。

我们正在使用带有来自 svcutil 的自动生成代码的合同优先方法(我们不能“只是”更改合同)...

而且无法在配置文件中执行...

我见过有人“覆盖”一些方法来制作自己的自定义标头 - 但这不是自定义标头,它是 SOAP 协议中的标准。

如何在 (SOAP) 标头中添加 wsa:replyto?

4

1 回答 1

11

为了从 WCF 调用需要WS-Addressing的服务,您必须将客户端端点配置为使用支持它的绑定,例如WSHttpBinding

然后,您可以通过OperationContext.OutgoingMessageHeaders属性将wsa:ReplyTo标头设置为客户端代码中的特定 URL :

using (new OperationContextScope((IContextChannel)channel))
{
    OperationContext.Current.OutgoingMessageHeaders.ReplyTo =
        new EndpointAddress("http://client/callback");

    channel.DoSomething();
}

在此示例中,我们将wsa:ReplyTo标头设置为已知 URL,客户端通道在该 URL 中侦听来自服务的传入回调消息。

或者,如果服务支持它,您可以使用WSDualHttpBinding,它内置了对通过 WS-Addressing进行双工通信的支持。在这种情况下,您将通过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>
于 2012-02-06T10:21:39.743 回答