.NET एप्लिकेशन डोमेन क्या है?


84

विशेष रूप से, दो अलग-अलग एप्लिकेशन डोमेन में कोड चलाने के निहितार्थ क्या हैं?

एप्लिकेशन डोमेन सीमा पर डेटा को सामान्य रूप से कैसे पार किया जाता है? क्या यह प्रक्रिया सीमा के पार डेटा के समान है? मैं इस अमूर्तता के बारे में अधिक जानने के लिए उत्सुक हूं और यह किसके लिए उपयोगी है।

संपादित करें: सामान्य रूप से AppDomain वर्ग का अच्छा मौजूदा कवरेज, जो मुझे एप्लिकेशन डोमेन नहीं समझता है


3
पहला भाग stackoverflow.com/questions/622516/i-dont-understand-appdomains का डुप्लिकेट है । हो सकता है कि प्रश्न को पासिंग डेटा के बारे में संपादित किया जाए।
जॉन साउंडर्स 20

वाह, वह एक चूक गया। इसे बंद किया जा सकता है।
ल्यूक

जवाबों:


80

एक AppDomain मूल रूप से एक अलग क्षेत्र प्रदान करता है जिसमें कोड एक प्रक्रिया के अंदर चलता है।

इसके बारे में सोचने का एक आसान तरीका लगभग आपकी मुख्य प्रक्रिया के अंदर बैठे एक हल्के वजन की प्रक्रिया जैसा है। प्रत्येक AppDomain पूर्ण अलगाव में एक प्रक्रिया के भीतर मौजूद है, जो आपको कोड को सुरक्षित रूप से चलाने की अनुमति देता है (यदि आवश्यक हो तो पूरी प्रक्रिया को फाड़े बिना इसे अनलोड किया जा सकता है), अलग सुरक्षा के साथ, आदि।

अपनी बारीकियों के अनुसार - यदि आप एक प्रक्रिया के भीतर 2 अलग-अलग AppDomains में कोड चलाते हैं, तो कोड अलगाव में चलेगा। AppDomains के बीच किसी भी संचार या तो धारावाहिक या MarshallByRefObject के माध्यम से नियंत्रित किया जाएगा। यह इस संबंध में रीमोटिंग का उपयोग करना बहुत पसंद करता है। यह एक बड़ी मात्रा में सुरक्षा प्रदान करता है - आप उस कोड को चला सकते हैं जिस पर आपको भरोसा नहीं है, और यदि यह कुछ गलत करता है, तो यह आपको प्रभावित नहीं करेगा।

MSDN के अनुप्रयोग डोमेन के विवरण में कई और विवरण हैं ।


क्या आप स्पष्ट कर सकते हैं कि "अगर यह कुछ गलत करता है" तो आपका क्या मतलब है?
ल्यूक

12
एक उदाहरण: यदि आपके पास थ्रेडपूल में एक अनहेल्ड थ्रेड है, तो यह ऐप डोमेन को फाड़ देगा। आम तौर पर, यह आपकी प्रक्रिया को मार देगा - यदि आप उपयोगकर्ता-कोड या एक प्लगइन लोड कर रहे हैं तो खतरनाक है। एक अलग एपडोमैन में चलाने का मतलब है कि आप इसे बेहतर तरीके से संभाल सकते हैं - अगर दूसरे एपडोमैन को फाड़ना पड़ता है, तो आप इसे संभाल सकते हैं बिना अपनी प्रक्रिया को फाड़े।
रीड कोपसे जूल

21

यह .NET रनटाइम द्वारा प्रदान की गई एक आइसोलेशन परत है। जैसे, ऐप डोमेन एक प्रक्रिया में रहते हैं (1 प्रक्रिया में कई ऐप डोमेन हो सकते हैं) और उनका अपना वर्चुअल पता स्थान होता है।

ऐप डोमेन उपयोगी हैं क्योंकि:

  • वे पूर्ण प्रक्रियाओं की तुलना में कम महंगे हैं
  • वे बहुरंगी हैं
  • आप इस प्रक्रिया में सब कुछ मारे बिना एक को रोक सकते हैं
  • संसाधनों / विन्यास / आदि का पृथक्करण
  • प्रत्येक ऐप डोमेन अपने सुरक्षा स्तर पर चलता है

1

यदि आप इसे प्रोसेसर के आंतरिक विवरण परिप्रेक्ष्य से देखते हैं तो यह कोड सेगमेंट (सीएस) रजिस्टर के लिए अलग मूल्य निर्धारित करता है। कोड और सीएस: आईपी (इंस्ट्रक्शन पॉइंटर) रजिस्टर वह है जो प्रोसेसर द्वारा निष्पादित होता है।

(मैंने संक्षिप्तता के लिए पृष्ठ तालिका संबंधित चर्चा को चुना है)।

AppDomain इस सीमा को चिह्नित करता है। कोड सुरक्षा के लिए।

इस पृष्ठभूमि को देने का कारण इन प्रकारों के प्रश्न को दूर करना है: 1. हम दो ऐप डोमेन (हाँ पाइप्स या कुछ अन्य शेयरिंग मैकेनिज़ का उपयोग करके CS तक सीधे तौर पर कैसे पहुँच सकते हैं) में संसाधन तक नहीं पहुँच सकते हैं: IP कैंट को कुछ अन्य एपडोमेन पर सेट किया जा सकता है। यह सिर्फ OS है जो इसे कर सकता है। CLR नहीं)

  1. क्या ऐप डोमेन में कई धागे हो सकते हैं। तकनीकी रूप से हाँ, क्योंकि सीएस वर्तमान प्रक्रिया में होने जा रहा है। आप जंप स्टेटमेंट (फ़ंक्शन कॉल / गोटो संयोजन) द्वारा आईपी को कुछ और में बदल सकते हैं

  2. दो अलग-अलग एप्लिकेशन डोमेन संचार में दो धागे कर सकते हैं (नंबर संदर्भ बिंदु 1.)

  3. एकल एप्लिकेशन डोमेन संचार में दो धागे हो सकते हैं (हां। संदर्भ 2 बिंदु)

CS: IP कैसे काम करता है, इन मामलों के कई अन्य संयोजनों का थोड़ा ज्ञान द्वारा उत्तर दिया जा सकता है।


0

एक प्रक्रिया के भीतर चल रहे प्रत्येक अनुप्रयोग, AppDomain भी एक हल्के वजन की प्रक्रिया है या हम तार्किक इकाई कह सकते हैं जिसमें असेंबलियों का समूह होता है (यह एक कंटेनर होता है जिसमें असेंबली का समूह होता है) और यह प्रक्रिया के अलगाव की प्रक्रिया में मौजूद होता है। , यह एक ही प्रक्रिया के भीतर कई विधानसभाओं को चलाने और उन्हें सीधे पहुंच के लिए रोकने की अनुमति देता है।

AppDomain के भीतर रनिंग डॉट नेट एप्लिकेशन: किसी भी डॉट नेट एप्लिकेशन को चलाने के बाद, ऑपरेशन सिस्टम शेल एक प्रक्रिया में CLR लोड करता है और एक ही प्रक्रिया में नए AppDomain बनाए जाते हैं और बनाए गए AppDomain में सभी असेंबलियों को लोड करते हैं, अब AppDomain कोड से निष्पादित किया जाएगा।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.