2012-02-03 28 views
9

我正在使用WCF調用BizTalk服務。該服務需要在SOAP頭中設置wsa:replyto地址,以便在完成該過程時能夠進行「回調」。如何在WCF中使用WS-Addressing並設置wsa:replyto頭?

我們使用來自SvcUtil工具自動生成的代碼契約優先計算策略(我們不能「只是」變更合同)...

而且它不可能在配置文件中做...

我看到有人'重寫'一些方法來創建自己的自定義標題 - 但這不是自定義標題,它是SOAP協議中的標準。

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

回答

10

爲了從WCF調用需要WS-Addressing的服務,您必須將客戶端端點配置爲使用支持它的綁定,例如WSHttpBinding

然後,您可以通過OperationContext.OutgoingMessageHeaders屬性設置在你的客戶端代碼wsa:ReplyTo頭到特定網址:

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

    channel.DoSomething(); 
} 

在這個例子中,我們的wsa:ReplyTo頭設置到客戶端通道監聽已知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> 
+0

我發現它比你的要複雜得多的解決方案...您的解決方案是好的,方便,乾淨...謝謝! – 2012-02-06 12:57:45

+0

我很高興我可以幫助:) – 2012-02-06 13:47:36

+0

我使用自定義綁定,所以必須設置 - > robnick 2017-01-05 01:17:24

相關問題