如何在WCF中使用WS-Addressing并设置wsa:replyto头?

如何在WCF中使用WS-Addressing并设置wsa:replyto头?,wcf,c#-4.0,soap,ws-addressing,Wcf,C# 4.0,Soap,Ws Addressing,我正在使用WCF调用BizTalk服务。该服务要求在SOAP头中设置wsa:replyto地址,以便在流程完成时能够进行“回调” 我们正在使用契约优先方法,从svcuti自动生成代码(我们不能“仅仅”更改契约) 在配置文件中不可能执行此操作 我见过有人“重写”一些方法来生成自己的自定义头-但这不是自定义头,而是SOAP协议中的标准 如何在(SOAP)头中添加wsa:replyto?为了调用需要来自WCF的服务,您必须将客户端端点配置为使用支持它的绑定,例如 然后,您可以通过以下属性将wsa:Re

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

我们正在使用契约优先方法,从svcuti自动生成代码(我们不能“仅仅”更改契约)

在配置文件中不可能执行此操作

我见过有人“重写”一些方法来生成自己的自定义头-但这不是自定义头,而是SOAP协议中的标准


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

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

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

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

    channel.DoSomething();
}
<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>
在本例中,我们将
wsa:ReplyTo
头设置为一个已知URL,客户端通道在该URL中侦听来自服务的传入回调消息

或者,如果服务支持它,您可以使用,它内置了对通过WS-Addressing进行双工通信的支持。在这种情况下,您可以通过以下属性设置回调地址:

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

    channel.DoSomething();
}
<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>


我找到了一个比您的解决方案复杂得多的解决方案。。。你的解决方案很好,简单,干净。。。谢谢我正在使用自定义绑定,因此必须设置-->