2012-02-03 9 views
9

मैं डब्ल्यूसीएफ का उपयोग कर बिज़टॉक सेवा को बुला रहा हूं। सेवा को WSA की आवश्यकता होती है: प्रक्रिया को पूरा होने पर 'कॉलबैक' बनाने में सक्षम होने के लिए SOAP शीर्षलेख में सेट करने के लिए उत्तर पता।मैं डब्ल्यूसीएफ में डब्ल्यूएस-एड्रेसिंग का उपयोग कैसे करूं और wsa सेट कर सकता हूं: हेडर को उत्तर दें?

हम svcutil से स्वत: जनरेट कोड के साथ एक अनुबंध की पहली approch (हम नहीं 'बस' अनुबंध को बदल सकते हैं) का उपयोग कर रहे हैं ...

और यह कॉन्फ़िग फ़ाइल में ऐसा करना संभव नहीं है ...

मैंने किसी को अपने स्वयं के कस्टम हेडर बनाने के लिए कुछ तरीकों को ओवरराइडिंग देखा है - लेकिन यह कस्टम हेडर नहीं है यह एसओएपी प्रोटोकॉल में मानक है।

मैं wsa कैसे जोड़ सकता हूं: (SOAP) शीर्षलेख में उत्तर दें?

उत्तर

10

डब्ल्यूसीएफ से WS-Addressing की आवश्यकता वाली सेवा को आमंत्रित करने के लिए आपको WSHttpBinding जैसे बाध्यकारी का उपयोग करने के लिए क्लाइंट एंडपॉइंट को कॉन्फ़िगर करना होगा।

फिर आप OperationContext.OutgoingMessageHeaders संपत्ति के माध्यम से अपने ग्राहक कोड में विशिष्ट URL से wsa:ReplyTo हैडर सेट कर सकते हैं:

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

    channel.DoSomething(); 
} 

इस उदाहरण में हम किसी ज्ञात URL जहाँ ग्राहक चैनल के लिए सुनता करने के लिए wsa:ReplyTo हैडर सेट कर रहे हैं सेवा से आने वाले कॉलबैक संदेश।

वैकल्पिक रूप से, सेवा यह का समर्थन करता है हैं, तो आप 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> 
+0

मैं एक समाधान है जो बहुत तुम्हारा से अधिक जटिल थे पाया ... आपका समाधान, अच्छा आसान और साफ है ... धन्यवाद! –

+0

मुझे खुशी है कि मैं मदद कर सकता हूं :) –

+0

मैं एक कस्टम बाइंडिंग का उपयोग कर रहा हूं, इसलिए सेट करना था -> robnick

संबंधित मुद्दे