2009-02-02 14 views
7

में डब्ल्यूसीएफ को कॉन्फ़िगर कैसे करें मैं एक वेब एप्लिकेशन (एएसपी.नेट 3.5) विकसित कर रहा हूं जो कई वेब सेवाओं का उपभोग करेगा। मैंने प्रत्येक वेब सेवा के लिए एक अलग डीएल-प्रोजेक्ट बनाया है: इन परियोजनाओं में सेवा संदर्भ और क्लाइंट कोड शामिल है।एक अलग डीएलएल परियोजना

हालांकि, बुला वेबसाइट चाहिए यह web.config में <system.serviceModel> जानकारी (<bindings> और <client> नोड्स) है, भले ही इस जानकारी dll के app.config फ़ाइल में भी है! मैंने serviceclass.dll.config को वेबसाइट की बिन निर्देशिका में कॉपी करने का प्रयास किया है, लेकिन इससे मदद नहीं मिली।

वहाँ एक WCF ग्राहक के विन्यास को केंद्रीकृत करने कोई तरीका है?

+0

इसे खोजने वाले किसी भी व्यक्ति के लिए, इस उत्तर पर एक नज़र डालें: http://stackoverflow.com/a/839941/592732 – MarioVW

उत्तर

4

मैं केवल WCF अनुभव, BasicHTTP बाइंडिंग के साथ सभी सीमित कर दिया है। लेकिन मैं डब्ल्यूसीएफ की एक्सएमएल फाइलों के लिए एलर्जी हूं और अब तक उनसे बचने में कामयाब रहा हूं। मैं आम तौर पर इसकी सिफारिश नहीं करता लेकिन मैंने अपने ऐप्स में कॉन्फ़िगरेशन विवरण मौजूदा कॉन्फ़िगरेशन स्टोर डाल दिया और फिर उन्हें प्रोग्रामिक रूप से लागू किया। जैसे एक वेब सेवा प्रॉक्सी के साथ मैं क्लाइंट के लिए कन्स्ट्रक्टर का उपयोग करता हूं जो 'बाइंडिंग्स' और 'एंडपॉइंट' लेता है और प्रोग्रामिंग रूप से बाइंडिंग & एंडपॉइंट पर सेटिंग्स को लागू करता है।

एक और अधिक elegent समाधान यहाँ descibed प्रतीत होता है: Reading WCF Configuration from a Custom Location, लेकिन मैं अभी तक इसे करने की कोशिश नहीं की है।

+0

धन्यवाद। मैंने आपके द्वारा प्रदान किए गए लिंक में कोड करने का प्रयास किया है और यह वही करता है जो मैं चाहता हूं। – edosoft

3

यह xml config छोड़ और निर्माता में सेवा या एक कस्टम "सेवा फैक्टरी" के साथ जुड़े बाध्यकारी और Endpoint कक्षाओं का निर्माण संभव है। iDesign इस पर कुछ अच्छी जानकारी है: http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=5&tabid=11 (प्रोक फैक्टरी में देखें)

उनके दृष्टिकोण में, आप एक उच्च स्तर पर निर्दिष्ट करने के लिए कि वे किस तरह काम करना चाहिए अपनी सेवाओं पर स्थापित गुण (यानी [इंटरनेट], [इंट्रानेट] , [बिजनेसटॉ बिजनेस]), और सेवा कारखाना प्रत्येक परिदृश्य के लिए सर्वोत्तम प्रथाओं के अनुसार सेवा को कॉन्फ़िगर करता है। उनकी पुस्तक सेवा की इस तरह के निर्माण में बताता है: http://www.amazon.com/Programming-WCF-Services-Juval-Lowy/dp/0596526997

तुम सिर्फ विन्यास एक्सएमएल कॉन्फिग साझा करना चाहते हैं, हो सकता है का उपयोग configSource विन्यास के लिए एक पथ निर्दिष्ट की विशेषता: http://weblogs.asp.net/cibrax/archive/2007/07/24/configsource-attribute-on-system-servicemodel-section.aspx

4

मेरे अनुभव से, पुस्तकालय परियोजनाओं कभी नहीं पढ़ app.config।

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

+1

बिल्कुल - यदि आपके पास एक डीएलएल है जो किसी ऐप द्वारा होस्ट/उपयोग किया जाता है, तो केवल ऐप की कॉन्फ़िगरेशन मायने रखती है। यह एक .NET मूल डिज़ाइन निर्णय है। यही कारण है कि अलग परियोजना में सेटिंग्स DLL के app.config बिल्कुल इस्तेमाल नहीं किया जा रहा है .... :-( –

3

याद किया जाता है कि एक विन्यास फाइल एक निष्पादन एक प्रवेश बिंदु है कि द्वारा पढ़ा जाता है। एक लाइब्रेरी डीएल में एंट्री पॉइंट नहीं होता है, इसलिए यह असेंबली नहीं है जो इसे पढ़ेगी। निष्पादन असेंबली में पढ़ने के लिए एक विन्यास फाइल होना चाहिए।

आप अपने वेब कॉन्फ़िगरेशन को केंद्रीकृत करना चाहते हैं तो मैं तुम्हें वर्चुअल निर्देशिका के साथ IIS में उन्हें घोंसले में देखो सुझाव है। यह आपको जो कुछ भी चाहिए उसे केंद्रीकृत करने के लिए कॉन्फ़िगरेशन विरासत का उपयोग करने की अनुमति देगा।

0

सभी कक्षा पुस्तकालयों (डीएलएल) में से पहले अपनी स्वयं की कॉन्फ़िगरेशन नहीं है, हालांकि वे अपने मेजबान (वेब ​​/ निष्पादन योग्य आदि) की कॉन्फ़िगरेशन पढ़ सकते हैं। ऐसा कहा जा रहा है कि, मैं अभी भी एक टेम्पलेट और आसान संदर्भ के रूप में पुस्तकालय परियोजनाओं पर एक app.config फ़ाइल बनाए रखता हूं।

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

1

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

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