2010-11-10 6 views
27

मेरे पास वर्तमान में आईआईएस 7 में 2 एक्स एएसपी.नेट 3.5 वेब अनुप्रयोग हैं (उन्हें वेबपैंट और वेब चाइल्ड कहें)।आईआईएस विरासत माता-पिता विन्यास मूल्य विरासत में एएसपी.NET 'एप्लिकेशन' नेस्टेड किया?

वेब चाइल्ड आईआईएस 7 में वेबपैरेंट सूची में घिरा हुआ है और इसे एप्लिकेशन के रूप में स्थापित किया गया है (वेबपैरेंट के भीतर केवल वर्चुअल निर्देशिका के बजाय)। वर्तमान में दोनों अपने स्वयं के (क्लासिक) एप्लिकेशन पूल का उपयोग करते हैं।

दोनों वेबपैंट और वेब चाइल्ड की अपनी मूल निर्देशिका में अपनी पूरी तरह परिभाषित वेब.कॉन्फिग फाइलें हैं।

मैंने माना था कि वेब चाइल्ड को आईआईएस के भीतर 'एप्लिकेशन' के रूप में परिभाषित किया गया है, यह वेबपैर कॉन्फ़िगरेशन फ़ाइल से कुछ भी प्राप्त नहीं करेगा। हालांकि, इस कॉन्फ़िगरेशन के बावजूद, मैं web.config के भीतर विभिन्न तत्वों से संबंधित त्रुटियों को देख रहा हूं, जो पहले ही परिभाषित किए जा रहे हैं (जो सही है, कुछ ऐसी चीजें हैं जो कॉन्फ़िगरेशन फाइलों में हैं, लेकिन मैंने सोचा कि उन्हें पूरी तरह से स्वतंत्र रूप से इलाज किया जाना चाहिए एक और)?

क्या कोई यह स्पष्ट कर सकता है कि यह क्यों हो रहा है?

+0

शायद वे 'applicationHost.config' से आते हैं। – leppie

उत्तर

13

यदि उन्हें दोहराया जाता है, तो आपको <remove/> पर पहले बच्चे के आवेदन web.config में, फिर उस तत्व को वापस जोड़ दें जिसे आप चाहते हैं। यह माना जा रहा है कि आप एक अलग मूल्य चाहते हैं। यदि आप नहीं करते हैं, तो बस तत्व को छोड़ दें। एक कनेक्शन स्ट्रिंग कुछ ऐसे अनुप्रयोगों का एक अच्छा उदाहरण होगा जो सभी अनुप्रयोगों के लिए आम है - इसलिए आपको केवल रूट में इसे निर्दिष्ट करने की आवश्यकता है।

उदाहरण:

<siteMap defaultProvider="AdminSiteMapProvider" enabled="true"> 
     <providers> 
     <remove name="AdminSiteMapProvider"/> 
     <add name="AdminSiteMapProvider" description="Admin SiteMap provider" type="System.Web.XmlSiteMapProvider" siteMapFile="~/App_Data/admin.sitemap" securityTrimmingEnabled="true" /> 
     </providers> 
    </siteMap> 
+3

मैं देखता हूं, इसलिए आईआईएस में एक बच्चे के रूप में परिभाषित होने के बावजूद, यह अभी भी माता-पिता की कॉन्फ़िगरेशन से अवगत रहना है? क्या कोई सामान्य नियम है कि प्रत्येक वेब.कॉन्फिग के भीतर कौन से आइटम 'डुप्लिकेट' किए जा सकते हैं और कौन से आइटम त्रुटियों को फेंक देंगे (बिना दिए गए 'निकालें' समाधान के)? – marcusstarnes

+1

हां, उन मामलों को छोड़कर जहां आप स्पष्ट रूप से विरासत को रोकते हैं, जैसा शाऊल ने समझाया था।मेरा मानना ​​है कि यदि आपके पास किसी भी तत्व पर एक ही नाम है तो आपको अपवाद मिलेगा, लेकिन आपको इसे एक कोशिश/परीक्षण देना होगा। – ScottE

+0

यह अभी भी विरासत सेटिंग्स का ख्याल नहीं रखता है जो कि बच्चे ऐप पर लागू नहीं होता है जिसका मतलब रखरखाव का एक टन है। ऐसा लगता है कि उन्हें इसे "मॉड्यूल" जैसा कुछ और कहना चाहिए था क्योंकि यह किसी अन्य ऐप के संदर्भ में चल रहा है। ऐसा लगता है कि एकमात्र व्यावहारिक समाधान एक उचित "ऐप" संदर्भ प्रदान करने के लिए उप-डोमेन का उपयोग करके एक अलग साइट सेट करना है। – rainabba

-1

स्कॉट का पालन सलाह और यह भी सुनिश्चित करें कि आप सही IIS में WebChild क्लिक किया और आवेदन करने के लिए कन्वर्ट चयन किया है।

+0

बच्चे को पहले से ही आईआईएस के भीतर एक आवेदन के रूप में परिभाषित किया गया है, और नतीजतन, वह विकल्प उपलब्ध नहीं है। – marcusstarnes

54

आपकी समस्या का सटीक समाधान आपके द्वारा देखे जा रहे कॉन्फ़िगरेशन अपवाद संदेश पर निर्भर करेगा। हालांकि, यह एक सामान्य समस्या है जिसे अक्सर "वेबपैरेंट" के लिए web.config में स्थान तत्व पर inheritInChildApplications विशेषता के उपयोग के माध्यम से हल किया जा सकता है। इस प्रकार एक स्थान तत्व में पूरे system.web अनुभाग लपेटकर करके, आप समस्या आप वर्णित समाप्त करने के लिए सक्षम होना चाहिए:

<location path="." inheritInChildApplications="false"> 
    <system.web> 
    <!-- ... --> 
    </system.web> 
</location> 
आईआईएस 7 के साथ

, आप भी system.WebServer खंड एक ही रैप करने के लिए चाहता हूँ तरीका:

<location path="." inheritInChildApplications="false"> 
    <system.webServer> 
    <!-- ... --> 
    </system.webServer> 
</location> 

यह समाधान एक उत्कृष्ट ब्लॉग लेख है कि मैं here पाया पर आधारित है।

+1

वाह ... मुझे इस स्थान टैग के बारे में पता नहीं था। एएसपी.नेट आश्चर्यजनक रूप से शक्तिशाली है! : डी मुझे बाल ऐप के बिन फ़ोल्डर में शामिल नहीं होने वाली भूमिका प्रदाता असेंबली से संबंधित बाल ऐप में त्रुटियां मिल रही थीं। इस टैग को लागू करने के बाद, सबकुछ अपेक्षित काम करता है! : डी –

+3

यह एक गंदे हैक की तरह लगता है क्योंकि आपको इसे हर जगह रखना है (डिफ़ॉल्ट व्यवहार होना चाहिए) और टैग जोड़ें जो कि बच्चे ऐप का उपयोग नहीं कर सकता है या childApp का परीक्षण नहीं कर सकता है और प्रत्येक समस्या को "ठीक" कर सकता है। यह मेरे लिए एक "ऐप" नहीं है क्योंकि यह अपने स्वयं के संदर्भ में नहीं चल रहा है बल्कि ऐप के अंदर चल रहे मॉड्यूल की तरह है। पूरी तरह से किसी अन्य साइट के तहत होस्टिंग के बिना ऐसा करने का एक बेहतर तरीका होना चाहिए (जो केवल वास्तविक समाधान की तरह लगता है)। – rainabba

+2

@rainabba - मैं गंदे हैक महसूस पर सहमत हूं। मुझे अभी भी अभिभावक web.config को अनदेखा करने के लिए बाल ऐप को लागू करने का एक और शानदार तरीका नहीं मिला है। यह 3 साल हो गया है, और मैं इस दृष्टिकोण का उपयोग कर रहा हूं (अक्सर नहीं) ... इसे कभी भी बेहतर महसूस नहीं होता है: - –

2

मुझे लगता है कि उत्तराधिकारी InChildApplications = "false" उन मामलों के लिए अच्छा है जहां आप अभी भी माता-पिता से कॉन्फ़िगरेशन के कुछ हिस्से को प्राप्त करना चाहते हैं। ऐसे मामलों में जहां आप पूरी तरह से विरासत को रोकना चाहते हैं (जैसा कि यदि मैं सही हूं तो इस मामले में), मैं सुझाव देता हूं कि 2 ऐप्स के लिए 2 अलग-अलग एप्लिकेशन पूल का उपयोग करें और फिर एप्लिकेशन में एक बहुत अच्छी तरह से प्रलेखित सेटिंग लागू न करें। जैसा कि मैंने इस प्रश्न में बताया है “Entry has already been added” - Two Separate App Pools

<add name="MyAppPool" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" enableConfigurationOverride="false"> 
    <processModel identityType="NetworkService" /> 
</add> 
संबंधित मुद्दे