2008-12-10 11 views
15

मैं web.config या app.config से बाइंडिंग ऑब्जेक्ट प्राप्त करना चाहता हूं।डब्ल्यूसीएफ: कॉन्फ़िगरेशन से बाइंडिंग ऑब्जेक्ट कैसे प्राप्त करें

तो, यह कोड काम करता है:

wcfTestClient = new TestServiceClient("my_endpoint", Url + "/TestService.svc"); 

लेकिन मैं निम्नलिखित करना चाहते हैं:

Binding binding = DoSomething(); 
wcfTestClient = new TestServiceClient(binding, Url + "/TestService.svc"); 

मैं DoSomething में दिलचस्पी है() विधि, निश्चित रूप से।

उत्तर

6

आप एक बाध्यकारी को App.config/Web.config से बाध्यकारी कॉन्फ़िगरेशन नाम देकर तुरंत बाध्य कर सकते हैं।

http://msdn.microsoft.com/en-us/library/ms575163.aspx

एक इसके विन्यास नाम से निर्दिष्ट बंधन के साथ WSHttpBinding वर्ग का एक नया उदाहरण आरंभीकृत।

निम्न उदाहरण दिखाता है कि एक स्ट्रिंग तर्क के साथ WSHttp बाइंडिंग क्लास का एक नया उदाहरण कैसे प्रारंभ करें।

// Set the IssuerBinding to a WSHttpBinding loaded from config 
b.Security.Message.IssuerBinding = new WSHttpBinding("Issuer"); 
+7

केवल तभी यदि आप जानते हैं कि आप किस प्रकार के बाध्यकारी का उपयोग करने जा रहे हैं, उदा। WSHttp बाइंडिंग या NetTcpBiding। आप रनटाइम पर बाइडिंग के प्रकार को बदलने के लिए लचीलापन खो देते हैं। – Anthony

+4

लेकिन मुझे किसी भी बाध्यकारी की आवश्यकता नहीं है, न केवल (WSHttp बाइंडिंग) –

+0

कस्टम बाइंडिंग के लिए: var binding = new system.ServiceModel.Channels.CustomBinding ("बाइंडिंगनाम"); – Sal

6

एक मुखर विकल्प डिफ़ॉल्ट निर्माता के साथ एक उदाहरण बनाने के लिए, टेम्पलेट के रूप में उपयोग करने के लिए हो सकता है:

Binding defaultBinding; 
using(TestServiceClient client = new TestServiceClient()) { 
    defaultBinding = client.Endpoint.Binding; 
} 

तो दूर इस टक और फिर से उपयोग यह। कोई मदद?

+0

कुछ भी बेहतर नहीं :) लेकिन मैं कॉन्फ़िगरेशन फ़ाइल से बाइंडिंग ऑब्जेक्ट प्राप्त करना चाहता हूं, इसे नाम से लोड करें। – bh213

7

मार्क Gabarra से this ब्लॉग पोस्ट देखें, यह पता चलता कॉन्फ़िगर किया गया बाइंडिंग

+0

यह केवल बताता है कि कॉन्फ़िगर किए गए बाइंडिंग को कैसे गणना करें। पूरी बात के लिए मेरा जवाब देखें। – daniloquio

7

की गणना करने में कैसे आप क्रम जब तक बंधन के प्रकार पता नहीं है, तो आप निम्न का उपयोग कर सकते हैं:

return (Binding)Activator.CreateInstance(bindingType, endpointConfigName); 

कहाँ बंधन के प्रकार के bindingType और endpointConfigName config फ़ाइल में निर्दिष्ट का नाम है।

सभी शामिल बाइंडिंग एक निर्माता प्रदान करते हैं जो एंडपॉइंट कॉन्फ़िगरेशननाम को केवल पैरामीटर के रूप में लेता है, इसलिए यह उन सभी के लिए काम करना चाहिए। मैंने इसे बिना किसी समस्या के WSHttp बाइंडिंग और नेट टीसीपी बाइंडिंग के लिए उपयोग किया है।

+0

यह केवल एक सार कॉन्फ़िगरेशन परिभाषा से शुरू होने वाली बाध्यकारी ऑब्जेक्ट को प्रारंभ करने का तरीका बताता है। पूरी बात के लिए मेरा जवाब देखें :) – daniloquio

4

यह उत्तर ओपी अनुरोध को पूरा करता है और पाब्लो एम। सिब्रारो से इस अद्भुत पोस्ट से 100% निकाला गया है।

http://weblogs.asp.net/cibrax/getting-wcf-bindings-and-behaviors-from-any-config-source

यह विधि आपको config के बंधन खंड देता है।

private BindingsSection GetBindingsSection(string path) 
{ 
    System.Configuration.Configuration config = 
    System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(
    new System.Configuration.ExeConfigurationFileMap() { ExeConfigFilename = path }, 
     System.Configuration.ConfigurationUserLevel.None); 

    var serviceModel = ServiceModelSectionGroup.GetSectionGroup(config); 
    return serviceModel.Bindings; 
} 

इस विधि आप वास्तविक Binding वस्तु तुम इतनी सख्त जरूरत के कर रहे हैं देता है।

public Binding ResolveBinding(string name) 
{ 
    BindingsSection section = GetBindingsSection(path); 

    foreach (var bindingCollection in section.BindingCollections) 
    { 
    if (bindingCollection.ConfiguredBindings.Count > 0 
     && bindingCollection.ConfiguredBindings[0].Name == name) 
    { 
     var bindingElement = bindingCollection.ConfiguredBindings[0]; 
     var binding = (Binding)Activator.CreateInstance(bindingCollection.BindingType); 
     binding.Name = bindingElement.Name; 
     bindingElement.ApplyConfiguration(binding); 

     return binding; 
    } 
    } 

    return null; 
} 
संबंधित मुद्दे