2009-12-29 19 views
26

क्या मैं मूल एचटीपी बाइंडिंग में डब्ल्यूसीएफ इनकमिंग/आउटगोइंग संदेशों में कस्टम एसओएपी हेडर जोड़ सकता हूं, जैसे कि हम एएसएमएक्स वेब सेवाओं में कस्टम प्रमाणीकरण हेडर जोड़ सकते हैं? उन कस्टम SOAP शीर्षलेख को .NET 2.0/1.1 वेब सेवा क्लाइंट (WSDL.EXE उपकरण द्वारा सुलभ) का उपयोग करके सुलभ किया जाना चाहिए।wcf में कस्टम साबुन शीर्षलेख कैसे जोड़ें?

+0

संदेश निरीक्षकों –

+0

सोप headesr के संबंध में ASMX/WCF अंतर के बारे में जानकारी के साथ फिर से मेरा उत्तर अद्यतन की जानकारी देने वाला मेरा उत्तर अद्यतन –

+0

धन्यवाद marc_s, यह अच्छा लग रहा है, मैं इसे बाहर की कोशिश करेंगे। – nRk

उत्तर

26

कोडप्लेक्स पर WCF Extras देखें - यह डब्ल्यूसीएफ के लिए एक आसान एक्सटेंशन लाइब्रेरी है जो अन्य चीजों के साथ - कस्टम एसओएपी हेडर प्रदान करता है।

एक और विकल्प आपकी डब्ल्यूसीएफ सेवा में WCF message contracts का उपयोग करना है - यह आपको आसानी से डब्ल्यूसीएफ एसओएपी हेडर को परिभाषित करने और सेट करने की अनुमति देता है।

[MessageContract] 
public class BankingTransaction 
{ 
    [MessageHeader] 
    public Operation operation; 
    [MessageHeader] 
    public DateTime transactionDate; 

    [MessageBodyMember] 
    private Account sourceAccount; 
    [MessageBodyMember] 
    private Account targetAccount; 
    [MessageBodyMember] 
    public int amount; 
} 

यहाँ, "ऑपरेशन" और "transactionDate" सोप हेडर के रूप में परिभाषित कर रहे हैं।

यदि इनमें से कोई भी तरीका मदद नहीं करता है, तो आपको डब्ल्यूसीएफ संदेश निरीक्षकों की अवधारणा की जांच करनी चाहिए जिन्हें आप एक्सटेंशन के रूप में लिख सकते हैं। वे आपको उदा। क्लाइंट पर प्रत्येक आउटगोइंग कॉल पर संदेश में कुछ शीर्षलेखों को इंजेक्ट करें, और अपने उपयोग के लिए सर्वर पर संदेश से उन्हें पुनर्प्राप्त करें।

इस ब्लॉग पोस्ट को Handling custom SOAP headers via WCF Behaviors पर एक संदेश निरीक्षक कैसे लिखना है, और इसे अपने प्रोजेक्ट सेटअप में शामिल करने के तरीके के बारे में एक प्रारंभिक बिंदु के लिए देखें।

ग्राहक के पक्ष IClientMessageInspector दो तरीकों BeforeSendRequest और AfterReceiveReply जबकि सर्वर साइड IDispatchMessageInspector विपरीत तरीकों है, यानि कि AfterReceiveRequest और BeforeSendReply परिभाषित करता है।

इसके साथ, आप वायर में जाने वाले प्रत्येक संदेश में हेडर जोड़ सकते हैं (या केवल कुछ ही चुनिंदा)।

यहाँ एक IClientMessageInspector implementor हम पूर्ण रूप से अपने स्थान की जानकारी सर्वर के लिए ग्राहकों से (भाषा और संस्कृति की जानकारी) भर में प्रसारित करने के लिए उपयोग करने से एक टुकड़ा है - आप इसका अंदाज़ा लगा आरंभ करने के लिए देना चाहिए:

public object BeforeSendRequest(ref Message request, IClientChannel channel) 
{ 
    International intlHeader = new International(); 
    intlHeader.Locale = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName; 

    MessageHeader header = MessageHeader.CreateHeader(WSI18N.ElementNames.International, WSI18N.NamespaceURI, intlHeader); 
    request.Headers.Add(header); 

    return null; 
} 

सर्वर की ओर, फिर आप उन शीर्षकों की उपस्थिति की जांच करेंगे, और यदि मौजूद हैं, तो उन्हें एसओएपी लिफाफा से निकालें और उनका उपयोग करें।

अद्यतन: ठीक है, तुम कर रहे हैं ग्राहकों को WCF का उपयोग कर .NET 2.0 और नहीं पर कर रहे हैं - अच्छी खबर है, यह अभी भी ठीक से काम करना चाहिए - विवरण के लिए इस ब्लॉग पोस्ट Custom SOAP Headers: WCF and ASMX देखते हैं। आप अपने .NET 2.0 क्लाइंट द्वारा भेजे जा रहे कस्टम हेडर को स्नीफ और निकालने के लिए सर्वर पक्ष पर संदेश निरीक्षक का उपयोग कर सकते हैं।

+0

धन्यवाद marc_s, मैंने डब्ल्यूसीएफ एक्स्ट्रास की कोशिश की, मैंने सेवा अनुबंध के दौरान सेवा अनुबंध डब्ल्यूसीएफ एक्स्ट्रा फेंक त्रुटि में "XmlSerializerFormat" विशेषता को जोड़ा। क्या कोई अन्य समाधान डब्ल्यूसीएफ अतिरिक्त की तरह उपलब्ध है? क्या मैं एएसएमएक्स सेवाओं में सोपहेडर जोड़ने के रूप में मैसेज कंट्रैक्ट को हर तरीके से विशेषता के रूप में जोड़ सकता हूं? मेरी आवश्यकता यह है कि मुझे डब्ल्यूसीएफ सेवा के लिए प्रत्येक कॉल के लिए कुछ (समान उपयोगकर्ता नाम और पासवर्ड) डेटा भेजने की आवश्यकता है। क्या इसे लागू करने का कोई तरीका है? – nRk

+0

याहू marc_s, यह बहुत अच्छा लग रहा है। लेकिन लेख में उल्लेख किया गया है कि ग्राहक .NET 3.0 या उच्चतम में होना चाहिए .. लेकिन मेरे मामले में, ग्राहक .NET 2.0 और 1.1 में हैं। क्या यह अभी भी लागू करना संभव है? – nRk

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