2010-03-09 11 views
18

मुझे किसी वेब.कॉन्फिग फ़ाइल के बीच कुछ सेटिंग्स (जैसे कनेक्शन स्ट्रिंग) को डुप्लिकेट करना है जो एक डब्ल्यूसीएफ होस्ट का उपयोग करता है और वेब क्लाइंट का उपयोग करने वाली web.config फ़ाइल।क्या कोई वेब.कॉन्फिग बाहरी xml फ़ाइल से पढ़ सकता है?

डुप्लीकेटिंग के हित में, क्या मेरे पास web.configs दोनों अलग xml फ़ाइल से पढ़ सकते हैं? दो web.configs पूरी तरह से विभिन्न समाधान/परियोजनाओं में हो सकते हैं, इसलिए मुझे लगता है कि यह संभव नहीं है, लेकिन अन्य की राय प्राप्त करना चाहता था।

पीएस: मुझे समझ में आता है कि मैं सभी कॉन्फ़िगरेशन सेटिंग्स को स्टोर करने के लिए डेटाबेस का उपयोग कर सकता हूं।

उत्तर

19

हाँ, किसी भी विन्यास अनुभाग कर सकते हैं "externalized" जा - इस <appSettings>, <connectionStrings> और कई और अधिक जैसी चीज़ें शामिल हैं।

आप अपने web.config में कुछ इस तरह होगा:

<configuration> 
    <appSettings configSource="appSettings.config" /> 
    <connectionStrings configSource="connectionStrings.config" /> 
    <system.web>  
     <pages configSource="pages.config" /> 
     <httpHandlers configSource="httphandlers.config"> 
    </system.web>  
</configuration> 

externalized config सिर्फ होते हैं कि उन में से एक उपधारा:

httphandlers.config:

<httpHandlers> 
    <remove verb="*" path="*.asmx"/> 
    <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
    <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
    <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/> 
</httpHandlers> 

नोट करें कि आप पूरे <system.web> भाग को बाहरी नहीं कर सकते हैं, क्योंकि यह एक कॉन्फ़िगरेशन सेक्शन समूह है - कॉन्फ़िगरेशन सेक्शन नहीं - लेकिन आप System.web में निहित अधिकांश उप-अनुभागों को बाहरी कर सकते हैं।

+0

fansphandlers.config कहां स्थित होना चाहिए? यह संभव है कि इस कॉन्फ़िगरेशन फ़ाइल को साझा करने वाली परियोजनाएं – DotnetDude

+0

@DotnetDude पर हों: यदि आप पथ निर्दिष्ट नहीं करते हैं, तो httpHandlers.config को web.config के समान स्थान पर होना होगा। आप subpaths निर्दिष्ट कर सकते हैं, उदा। configSource = "config \ httpHandlers.config" को अपनी सभी कॉन्फ़िगरेशन फ़ाइलों को एक ही स्थान पर रखने के लिए।कई परियोजनाओं के बीच साझा करने के लिए, या तो अलग-अलग प्रोजेक्ट स्थान पर प्रतिलिपि बनाएँ, या विभिन्न निर्देशिका स्थानों में एक भौतिक फ़ाइल दिखाने के लिए ऑपरेटिंग सिस्टम स्तर पर प्रतीकात्मक लिंक जैसी सामग्री करें –

1

यदि आप कर सकते हैं, तो बस मशीन में कॉन्फ़िगरेशन सामान्य में रखें। कॉनफिग। वे दोनों वहां से पढ़ सकते हैं, और प्रत्येक web.config आपको आवश्यक मूल्यों को ओवरराइड कर सकता है।

मैं कहता हूं कि आप कर सकते हैं, क्योंकि मुझे पता है कि कई होस्टिंग कंपनियां इसे तब तक संशोधित नहीं करने देगी जब तक आप समर्पित सर्वर किराए पर नहीं लेते।

1

आप अपने web.config http://blog.andreloker.de/post/2008/06/Keep-your-config-clean-with-external-config-files.aspx के बाहर अपने कनेक्शनस्ट्रिंग निर्दिष्ट कर सकते हैं लेकिन यह एक ही निर्देशिका में होना चाहिए।

+0

नहीं, एक ही निर्देशिका नहीं है। आप आसानी से लिख सकते हैं: <कनेक्शनस्ट्रिंग configSource = "config \ prod \ connectionStrings.config" />। बिल्कुल भी परेशानी नहीं है। –

+0

फिर वह जाता है। इसे एक अलग फ़ाइल में रखें और इसे विभिन्न अनुप्रयोगों के web.configs के बीच साझा करें !! – ram

11

एक कॉन्फ़िगरेशन फ़ाइल अन्य कॉन्फ़िगरेशन फ़ाइलों को इंगित कर सकती है जब तक कि फ़ाइलें एक ही पथ (उपनिर्देशिका सहित) में हों।

यहाँ मेरी config सेटिंग्स का एक उदाहरण है:

<connectionStrings configSource="web\config\connectionStrings.config" /> 
<appSettings configSource="web\config\appSettings.config" /> 
<system.diagnostics configSource="web\config\diagnostics.config" /> 
<system.serviceModel> 
    <bindings configSource="web\config\serviceModelBindings.config" /> 
    <behaviors configSource="web\config\serviceModelBehaviors.config" /> 
    <services configSource="web\config\serviceModelServices.config" /> 
    <client configSource="web\config\serviceModelClient.config" /> 
</system.serviceModel> 

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

+0

** रनटाइम ** और ** system.web.extensions * * _sections_ *** configSource *** के साथ काम नहीं करता है? – Kiquenet

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