2012-02-03 27 views
9

Tôi đang gọi dịch vụ BizTalk bằng WCF. Dịch vụ yêu cầu địa chỉ wsa: replyto được đặt trong tiêu đề SOAP để có thể thực hiện 'gọi lại' khi quá trình được thực hiện.Làm cách nào để sử dụng WS-Addressing trong WCF và đặt tiêu đề wsa: replyto?

Chúng tôi đang sử dụng một approch hợp đồng đầu tiên với mã tự động tạo ra từ svcutil (chúng ta có thể không phải là 'chỉ' thay đổi hợp đồng) ...

Và nó không thể làm trong file config ...

Tôi đã thấy ai đó 'ghi đè' một số phương pháp để tạo tiêu đề tùy chỉnh của riêng họ - nhưng đây không phải là tiêu đề tùy chỉnh, đây là tiêu chuẩn trong giao thức SOAP.

Làm cách nào để thêm wsa: replyto vào tiêu đề (SOAP)?

Trả lời

10

Để gọi một dịch vụ yêu cầu WS-Addressing từ WCF, bạn sẽ phải định cấu hình điểm cuối ứng dụng khách sử dụng một liên kết hỗ trợ nó, chẳng hạn như WSHttpBinding.

Sau đó bạn có thể thiết lập wsa:ReplyTo tiêu đề để một URL cụ thể trong mã khách hàng của bạn thông qua OperationContext.OutgoingMessageHeaders tài sản:

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

    channel.DoSomething(); 
} 

Trong ví dụ này, chúng tôi đang thiết lập các wsa:ReplyTo tiêu đề để một URL biết nơi kênh khách hàng lắng nghe cho các tin nhắn gọi lại từ dịch vụ.

Ngoài ra, nếu dịch vụ hỗ trợ nó, bạn có thể sử dụng WSDualHttpBinding, trong đó đã xây dựng trong hỗ trợ cho duplex truyền qua WS-Addressing. Trong trường hợp này, bạn sẽ thiết lập các địa chỉ gọi lại qua WSDualHttpBinding.ClientBaseAddress tài sản:

<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

Tôi tìm thấy một giải pháp mà là phức tạp hơn nhiều so với bạn ... Giải pháp của bạn là thoải mái, dễ dàng và sạch sẽ ... Cảm ơn! –

+0

Tôi rất vui vì tôi có thể giúp :) –

+0

Tôi đang sử dụng Liên kết tùy chỉnh, vì vậy phải đặt -> robnick

Các vấn đề liên quan