2009-10-21 13 views
5

मैं एक बड़ी प्रणाली पर काम कर रहा हूं, जिसके लिए मुझे वेब सेवा तक पहुंचने के लिए डब्ल्यूसीएफ का उपयोग करना है। मेरा टेस्ट कोड ठीक काम करता है, अब मुझे अपने डब्ल्यूसीएफ क्लाइंट कोड को बड़े सिस्टम में एकीकृत करने की जरूरत है। मैं मौजूदा 'app.config' फ़ाइल में नहीं जोड़ सकता, और अपने क्लाइंट कोड द्वारा उपयोग के लिए एक अलग .config फ़ाइल निर्दिष्ट करना चाहता हूं।मैं डब्ल्यूसीएफ क्लाइंट के लिए वैकल्पिक कॉन्फ़िगरेशन फ़ाइल कैसे निर्दिष्ट कर सकता हूं?

मैं यह कैसे सबसे अच्छा पूरा कर सकते हैं?

धन्यवाद!

उत्तर

8

2 विकल्प हैं।

विकल्प 1. चैनलों के साथ काम करना।

यदि आप सीधे चैनलों के साथ काम कर रहे हैं, तो .NET 4.0 और .NET 4.5 में ConfigurationChannelFactory है। MSDN पर उदाहरण इस प्रकार है:

var factory1 = new ConfigurationChannelFactory<ICalculatorChannel>(
     "endpoint1", 
     newConfiguration, 
     null); 
ICalculatorChannel client1 = factory1.CreateChannel(); 

यह चर्चा की है:

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); 
fileMap.ExeConfigFilename = "Test.config"; 
Configuration newConfiguration = ConfigurationManager.OpenMappedExeConfiguration(
    fileMap, 
    ConfigurationUserLevel.None); 

ConfigurationChannelFactory<ICalculatorChannel> factory1 = 
    new ConfigurationChannelFactory<ICalculatorChannel>(
     "endpoint1", 
     newConfiguration, 
     new EndpointAddress("http://localhost:8000/servicemodelsamples/service")); 
ICalculatorChannel client1 = factory1.CreateChannel(); 

के रूप में लैंगडन से कहा, आप बस इस तरह, अशक्त में पास करके विन्यास फाइल से endpoint पते का उपयोग कर सकते एमएसडीएन documentation में।

विकल्प 2. प्रॉक्सी के साथ काम करना।

यदि आप कोड से उत्पन्न प्रॉक्सी के साथ काम कर रहे हैं, तो आप कॉन्फ़िगरेशन फ़ाइल पढ़ सकते हैं और ServiceModelSectionGroup लोड कर सकते हैं। वहाँ में कुछ अधिक परिश्रम बस ConfigurationChannelFactory लेकिन का उपयोग करने से शामिल है कम से कम आप कर सकते हैं उत्पन्न प्रॉक्सी (का उपयोग करते हुए कि हुड के नीचे एक ChannelFactory का उपयोग करता है और आप के लिए IChannelFactory का प्रबंधन करता है जारी है।

पाब्लो Cibraro यहाँ इस का एक अच्छा उदाहरण दिखाता है : Getting WCF Bindings and Behaviors from any config source

+0

फिलिप - मुझे विकल्प 1 का उपयोग करना आसान लगता है, लेकिन क्या आप विकल्प 2 पर कुछ और सलाह दे सकते हैं। जो कुछ मैंने पाया है वह असमर्थित है एड @ जेनरेटर @ जो प्रतिबिंब का उपयोग कर रहे हैं, और 100% संभावित कॉन्फ़िगरेशन विकल्पों को कवर नहीं करते हैं। –

+0

@GeorgySmirnov, क्या आपने http://weblogs.asp.net/cibrax/archive/2010/05/11/getting-wcf-bindings-and-behaviors-from-any-config-source.aspx में लिंक देखा था विकल्प 2? यह एक बहुत अच्छा उदाहरण दिखाता है। – Philippe

1

कोई अंतर्निहित है समर्थन इस के लिए WCF में दुर्भाग्य से। आपको अपने स्वयं के चैनलफैक्टरी उप-वर्ग और लोड/पार्स कॉन्फ़िगरेशन फ़ाइलों को स्वयं बनाना होगा। अधिक कार्यान्वयन विवरण के लिए एमएसडीएन मंचों पर यहां this post देखें।

0

या, आप इसे एक सरल और आसान तरीका कर सकते हैं - और इस पोस्ट है, जो की दुकान/आपके विन्यास को पुनः प्राप्त करने के लिए एक डेटासेट/DataTable मॉडल का उपयोग करता के रूप में एक कस्टम कॉन्फ़िग फ़ाइल को लागू (कार्य भी शामिल है कोड):

(.Net) suggestions on making a config file for a program?

4

आप अपनी पसंद के रूप में यह कर सकते हैं नहीं है - आप ही कर सकती है, लेकिन यह पूरी तरह से नहीं कर सकते।

<system.serviceModel> 
    <bindings configSource="bindings.config" /> 
    <behaviors configSource="behaviors.config" /> 
    <client configSource="client.config" /> 
    <services configSource="services.config" /> 
    ..... 
</system.serviceModel> 

तो <system.serviceModel> अंदर प्रत्येक अनुभाग के लिए, आप configSource= विशेषता का उपयोग करके एक बाहरी कॉन्फ़िग फ़ाइल निर्दिष्ट कर सकते हैं (और नहीं करते हैं:

तुम कर सकते हो क्या मुख्य एप्लिकेशन की कॉन्फ़िग फ़ाइल को यह अनुभाग जोड़ने है विजुअल स्टूडियो की लाल squiggly लाइनों को भ्रमित करने दें - हाँ, यह करता है काम!)।

आप किसी भी विन्यास अनुभाग के लिए ऐसा कर सकते हैं - लेकिन दुर्भाग्य से, वहाँ पूरे अनुभाग समूह (<system.serviceModel>) के लिए यह करने के लिए कोई रास्ता नहीं है।

मार्क

0

तो विकल्प marc_s ने उल्लेख किया काम करता है। विजुअल स्टूडियो चेतावनी को अनदेखा करें कि यह बाइंडिंग और अन्य सभी स्थानों पर configSource प्रॉपर्टी को नहीं पहचानता है।

+1

स्टैक ओवरफ़्लो में आपका स्वागत है! अपनी पोस्ट के लिए धन्यवाद! कृपया अपनी पोस्ट में हस्ताक्षर/टैगलाइन का उपयोग न करें। आपका उपयोगकर्ता बॉक्स आपके हस्ताक्षर के रूप में गिना जाता है, और आप अपनी प्रोफ़ाइल का उपयोग अपने बारे में किसी भी जानकारी को पोस्ट करने के लिए कर सकते हैं। [ हस्ताक्षर/टैगलाइन पर अक्सर पूछे जाने वाले प्रश्न] (http://stackoverflow.com/faq#signatures) –