2013-06-30 4 views
11

यदि एक ही एप्लिकेशन पूल में एकाधिक एएसपी.NET अनुप्रयोग चला रहे हैं, तो मेरे पास कक्षा 'स्थैतिक चर के कितने उदाहरण होंगे?एएसपी.NET साइट्स में स्थिर चर के दायरे

  1. प्रति आवेदन पूल में से एक?
  2. प्रति आवेदन पूल कार्यकर्ता प्रक्रिया में से एक?
  3. प्रति आवेदन एक?
  4. कुछ और?

बस कुछ संदर्भ देने के लिए:

मैं एक ServiceLocator कार्यान्वयन के लिए विशेष रूप से सोच रहा हूँ हम चाहते हैं कि एक स्थिर वर्ग चर में एक UnityContainer रखती है। सवाल यह है कि, सर्विसलोकेटर पर एक कंटेनर पंजीकृत करने वाले एकाधिक ऐप्स एक दूसरे के साथ हस्तक्षेप करेंगे?

ऐप्स आईआईएस 7.5 में .NET 4.0 पर चल रहे हैं, इससे कोई फर्क पड़ता है।

उदाहरण कोड (सरलीकृत)

public static class ServiceLocator 
    { 
     private static IUnityContainer _container; 

     public static void Initialize(IUnityContainer container) 
     { 
      if (_container != null) 
      { 
       throw new ApplicationException("Initialize should only be called once!"); 
      } 
      _container = container; 
     } 

    } 

तो मैं दो अलग-अलग वेब अनुप्रयोगों जो एक ही अनुप्रयोग पूल में चलाने से चलाने के लिए,, आम तौर पर Application_Start में, यह दूसरा मंगलाचरण पर एक अपवाद फेंक होगा? क्या यह हमेशा अपवाद फेंक देगा? क्या यह कभी अपवाद नहीं फेंक देगा? क्या यह कुछ विन्यास में अपवाद फेंक देगा?

अद्यतन: मुझे पता है कि प्रति अनुप्रयोग डोमेन स्थिर चर का एक उदाहरण होगा। तो, सवाल को फिर से लिखा जा सकता है "यदि एक ही एप्लिकेशन पूल में एकाधिक एएसपी.NET अनुप्रयोग चला रहे हैं, तो मेरे पास कितने ऐप डोमेन होंगे?"

मैं बहुत कुछ देख रहा हूं, लेकिन इस पर कोई आधिकारिक संदर्भ नहीं मिला है। किसी भी मदद की सराहना की जाती है, अधिमानतः आधिकारिक माइक्रोसॉफ्ट दस्तावेज के संदर्भ के साथ।

उत्तर

14

यदि एक ही एप्लिकेशन पूल में एकाधिक एएसपी.NET अनुप्रयोग चला रहे हैं, तो मेरे पास कितने ऐप डोमेन होंगे?

प्रत्येक एप्लिकेशन पूल में एकाधिक कार्यकर्ता प्रक्रियाएं हो सकती हैं, प्रत्येक कार्यकर्ता प्रक्रिया विभिन्न अनुप्रयोग उदाहरण चलाएगी। एक आवेदन में से प्रत्येक उदाहरण एक अलग AppDomain है - तो अपने मूल सवाल का जवाब प्रति आवेदन उदाहरण से एक है।

+1

और आपने मुझे बस इसे हरा दिया, और आखिरकार आप पिछले तीन मिनट संपादित करते हैं, आपका उत्तर सही है, इसलिए मैं आपको क्रेडिट दूंगा;) दरअसल, यह प्रति कार्यकर्ता प्रक्रिया प्रति एक आवेदन है, है ना? यदि एक आवेदन एकाधिक कार्यकर्ताओं की पूर्ति में चलता है? –

+0

@ एरिकए। ब्रैंडस्टेडमोमेन नहीं, यह अभी भी प्रति उदाहरण है, यदि किसी एप्लिकेशन में एकाधिक कार्यकर्ता धागे हैं, तो उन्हें अभी भी 'AppDomain' साझा करना चाहिए। – James

+1

एकाधिक कार्यकर्ता प्रक्रियाएं (वेब ​​गार्डन), एकाधिक कार्यकर्ता धागे नहीं। और, हां, प्रति उदाहरण एक अभी भी सही है, क्योंकि आपके पास प्रति प्रक्रिया एक आवेदन का एक उदाहरण होगा। तो, "एक प्रति आवेदन उदाहरण" सटीक है, और आपके पास प्रत्येक कार्यकर्ता प्रक्रिया के लिए एक आवेदन उदाहरण होगा, सही? –

1

मुझे पता है कि हर स्थिर चर अनुप्रयोग डोमेन के जीवन भर के लिए रहता है।

ताकि पर आधारित है, यह अनुप्रयोग पूल प्रक्रिया के अनुसार रहना होगा।

+0

तो, अनुवर्ती करने के लिए, एक एप्लिकेशन पूल में दस एप्लिकेशन चलाते समय मेरे पास कितने ऐप डोमेन होंगे? कृपया ऊपर वैकल्पिक 1-4 का उपयोग करके निर्दिष्ट करें, और कृपया एक संदर्भ दें। –

+0

आप स्वयं भी विरोधाभास करते हैं। पहली वाक्य में, आप कहते हैं कि मेरे पास एक प्रति ऐपडोमेन होगा, दूसरे में, आप कहते हैं कि मेरे पास एक प्रति प्रक्रिया होगी। मेरे पास निश्चित रूप से प्रति एक से अधिक ऐपडोमेन होगा। –

+0

ऐसा लगता है कि मैंने आपके प्रश्न को गलत तरीके से पढ़ा है: लेकिन सुसंगत होने के लिए: यदि आपका एप्लिकेशन एकाधिक ऐप डोमेन में चलता है तो आपके पास कई स्थिर डोमेन होंगे, यदि इसमें कई उदाहरण होंगे। यहां आपके लिए एक अच्छा पठन है, http://msdn.microsoft.com/en-us/magazine/cc163791.aspx#S14 –

1

इस तथ्य के आधार पर कि प्रति व्यक्ति एक स्थिर चर का एक उदाहरण होगा, और के। स्कॉट एलन द्वारा इस (लगभग 10 वर्ष पुराना) लेख के बारे में, एएसपी.नेट आवेदन प्रति एक ऐपडोमेन है, मैं निष्कर्ष निकालूंगा वहाँ प्रति ASP.NET वेब आवेदन प्रत्येक साझा चर का एक उदाहरण है, भले ही वे सभी एक ही अनुप्रयोग पूल में चलाने के लिए किया जाएगा कि,। अगर अधिक कार्यकर्ता प्रक्रियाओं को शुरू

, मैं इस पर शक उस में चल रहा है प्रक्रिया के अनुसार आवेदन प्रति एक उदाहरण होगा।

हालांकि अनुप्रयोगों दोनों के लिए कोड एक ही प्रक्रिया के अंदर रहता है, अलगाव की इकाई नेट AppDomain है। यदि साझा या स्थिर सदस्यों वाले वर्ग हैं, और वे वर्ग दोनों अनुप्रयोगों में मौजूद हैं, तो प्रत्येक ऐपडोमेन की स्थैतिक फ़ील्ड की अपनी प्रतिलिपि होगी - डेटा साझा नहीं किया जाता है।

(http://odetocode.com/Articles/305.aspx, "AppDomains और आप" अनुभाग देखें)।

तो, मेरे मूल प्रश्न का उत्तर 3 होगा), यदि एक कार्यकर्ता प्रक्रिया चल रही है।

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