2011-01-29 22 views
7

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

उदा। डिफ़ॉल्ट ऐप डोमेन की पहचान प्राधिकरण \ सीमित (प्राधिकरण या तो डोमेन नाम या मशीन का नाम है)। दो प्लग-इन दो बाल ऐप डोमेन में लोड किए जाते हैं। लोड किए गए प्लग-इन की पहचान प्राधिकरण \ Privileged1 और प्राधिकरण \ Privileged2 हैं। जबकि प्राधिकरण \ लिमिटेड ऊपर उल्लिखित डेटाबेस में से किसी को पहुँच नहीं है प्राधिकरण \ Privileged1 और प्राधिकरण \ Privileged2, डेटाबेस Database1 और Database2 क्रमश: के लिए सभी आवश्यक पहुंच है।

बच्चे एप्लिकेशन डोमेन बनाते समय, मैं System.AppDomain.SetThreadPrincipal विधि गुजर System.Security.Principal.WindowsPrincipal उदाहरण कहते हैं। उदाहरण सिस्टम से बनाया गया था। सुरक्षा। प्रिंसिपल। WindowsIdentity उदाहरण डुप्लीकेट उपयोगकर्ता टोकन से बनाया गया उदाहरण (http://support.microsoft.com/kb/306158 देखें)। WIndowsPrincipal उदाहरण बनाते समय मैंने डिफॉल्ट ऐप डोमेन में होने के बाद से WindowsIdentity.Impersonate विधि को कॉल छोड़ दिया है।

मुझे उम्मीद है कि ऐप डोमेन थ्रेड प्रिंसिपल सेट करना लोड किए गए प्लग-इन के लिए अपने संबंधित डेटाबेस में सफलतापूर्वक लॉग इन करने और कुछ टी-एसक्यूएल स्टेटमेंट निष्पादित करने के लिए पर्याप्त होगा। मेरे आश्चर्य के लिए, द्वारा लौटा गया मान WindowsIdentity.GetCurrent() डेटाबेस का कनेक्शन खोलते समय विधि का उपयोग किया जाता है। विधि द्वारा लौटाया गया मूल्य या तो प्रक्रिया पहचान या प्रतिरूपित पहचान है।

चूंकि प्रक्रिया पहचान में डेटाबेस के साथ काम करने के लिए आवश्यक अनुमतियां नहीं हैं, इसलिए यह स्वीकार्य नहीं है। इसलिए, प्रतिरूपण खेलने के लिए आना चाहिए। हालांकि, प्रतिरूपण केवल बाल ऐप डोमेन में ही होना चाहिए। प्रत्येक प्लग-इन प्लग-इन की लोडिंग और अनलोडिंग करने के लिए उपयोग की जाने वाली विधियों का खुलासा करता है। मैं समझता हूं कि मुझे शुरुआत में प्रतिरूपण करना है और उन तरीकों के अंत में प्रतिरूपण पूर्ववत करना है। हालांकि, बाल ऐप डोमेन में उत्पन्न सभी धागे के लिए प्रतिरूपण भी किया जाना चाहिए। चूंकि प्रत्येक प्लग-इन अपने एक या अधिक बच्चे प्लग-इन लोड करता है और प्रत्येक प्लग-इन एक या अधिक धागे उत्पन्न कर सकता है, प्रतिरूपण कई स्थानों पर किया जाना चाहिए, और यह बहुत गन्दा दिखता है।

यह प्रतिरूपण प्रदर्शन करने के लिए केवल एक बार ताकि सभी धागे कि बच्चे एप्लिकेशन डोमेन में उत्पन्न हुए हैं को प्रभावित करता है संभव है?

+1

आप बाल डोमेन की बजाय बाल प्रक्रियाओं का उपयोग करने और वांछित खातों के तहत इन प्रक्रियाओं को चलाने पर विचार कर सकते हैं। जाहिर तौर पर रिमोटिंग सेट अप करने से चीजें जटिल हो जाएंगी, लेकिन संभवतः आपके पास पहले से ही एक एपीआई है जो रीमोटिंग प्रकारों के लिए उपयुक्त है। –

+0

एप्लिकेशन पहले से ही मनमाने ढंग से पहचान के तहत चल रही बाल प्रक्रियाओं का समर्थन करता है। हालांकि, इसे बाल ऐप डोमेन के लिए एक ही चीज़ का समर्थन करना चाहिए। धन्यवाद। –

उत्तर

3

नहीं, आप ऐसा नहीं कर सकते - प्रतिरूपण प्रति थ्रेड है और उसी थ्रेड में कॉल स्टैक पर कई ऐपडोमेन से कोड हो सकता है। यह प्लगइन सिस्टम के लिए विशेष रूप से सच है जहां मुख्य कोड (कुछ मुख्य ऐपडोमेन से) प्लगइन के तर्क को अलग ऐपडोमेन में कॉल करता है।

अनिवार्य रूप से आपको प्लगइन कॉल करने से पहले प्रतिरूपण करना होगा और जब आप पूरा कर लेंगे तो वापस लेना होगा। ध्यान दें कि यदि प्लगइन अपने परिचालनों के लिए थ्रेडपूल का उपयोग करता है, तो उसे उचित रूप से प्रतिरूपण करने की आवश्यकता होगी।

+0

धन्यवाद, एलेक्सी। क्या ऐसी घटनाएं हैं जो इंगित करती हैं कि एक थ्रेड को किसी ऐप डोमेन में कुछ कोड निष्पादित करने के लिए असाइन किया गया है और थ्रेड ने कोड निष्पादन समाप्त कर दिया है? यदि ऐसी घटनाएं हैं, तो मैं उनके लिए सब्सक्राइब कर सकता हूं और सम्मानपूर्वक एक स्थान पर प्रतिरूपण और उलटा प्रदर्शन कर सकता हूं। –

+0

मुझे नहीं पता। मुझे इसकी कभी आवश्यकता नहीं थी, मैं रीमोटिंग और सिस्टम को देखकर पढ़ूंगा। रनटाइम। पता लगाने के लिए नेमस्पेस को रिमोट करना। –

+0

पर्याप्त मेला। सलाह के लिये धन्यवाद। –

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