2009-12-07 2 views
5

हमारे पास एक उत्पादन सर्वर पर एक विंडोज सेवा के रूप में चल रहा एक अनुप्रयोग है। आवेदन तैनाती सीमाओं पर ज्यादातर असेंबली में विभाजित है। मैं एप्लिकेशन असेंबली में हॉट-फ़िक्स की तैनाती को सुव्यवस्थित करना चाहता हूं। वर्तमान में मैं हॉट फिक्स को तैनात करने के लिए निम्न चरणों का पालन करता हूं। (हम मंचन के लिए उत्पादन वातावरण का डुप्लिकेट है, तो सब कुछ दो बार किया जा सकता है).net असेंबली की हॉट परिनियोजन

  1. लॉग इन सर्वर
  2. को सेवा बंद
  3. बैकअप वर्तमान में तैनात dll
  4. हॉटफिक्स के साथ बदलें (कॉपी मौजूदा dll से अधिक हॉटफिक्स)
  5. पुनः प्रारंभ सेवा
  6. रोल वापस अप्रत्याशित लोड त्रुटियों (के मामले में ऐसा नहीं होता है, फिर भी)
+०१२३५१६४१०६

मुझे लगता है कि मैं क्या चाहता हूं कि एक प्रीसेट फ़ोल्डर में एक डीएल अपलोड करना (एसएफटीपी) और एप्लिकेशन को नया डीएल उठाएं।

एक समाधान मैंने माना है कि सर्वर पर एक अलग सेवा चल रही है। आइए इसे हॉटफिक्स परिनियोजन सेवा कहें। यह नई फाइलों के लिए फाइल सिस्टम देखेगा और ऊपर दी गई सूची से 2-6 कदम उठाएगा।

किसी भी अंतर्दृष्टि की सराहना की जाती है। मैं अन्य विकल्पों के साथ-साथ जब तक वे तैनाती घर्षण को कम करता हूं, तब तक खुला रहता हूं।

उत्तर

4

एक अलग सेवा होने का शायद आपका सबसे अच्छा विकल्प है।

आप संभावित रूप से एक ही सेवा में ऐसा कर सकते हैं। एक "चाल" जिसे एक सेवा स्व-अद्यतन करने की आवश्यकता होगी, हालांकि, इसे लागू करना थोड़ा मुश्किल है।

आपको क्या करना होगा, आपकी सेवा बहुत हल्की खोल सेवा के अलावा कुछ भी नहीं है। इसके बाद यह एक अलग, इन्सुलेटेड ऐपडोमेन शुरू कर सकता है, और यह ऐपडोमेन आपकी सेवा की असेंबली लोड कर लेता है, और प्रारंभ होता है, और चलाता है।

बाद में, जब आप अपडेट करना चाहते थे (जो किसी भी घटना के माध्यम से सेवा को उठा सकता है, जिसमें नई असेंबली की प्रतिलिपि अद्यतन फ़ोल्डर [फाइलसिस्टम वाटर] के माध्यम से, स्पष्ट रूप से इसे नेटवर्किंग के माध्यम से बताती है]], यह आंतरिक ऐपडोमेन के प्रकार को रोकने के लिए एक तरीका ट्रिगर करने की आवश्यकता होगी, फिर AppDomain को अनलोड करें। इस बिंदु पर, यह उपरोक्त चरण 3 & 4 कर सकता है। फिर, इसे केवल ऐपडोमेन को फिर से लोड करना होगा, इसे प्रारंभ करना होगा,

चूंकि सेवा एक अलग ऐपडोमेन में होगी, यह सब सेवा निष्पादन के बिना एक निष्पादन योग्य में हो सकती है। जब कोई ऐपडोमेन अनलोड हो जाता है, तो लोड होने वाली असेंबली भी अनलोड हो जाती है।

यहां केवल एक ही आवश्यकता है जो इसे मुश्किल बनाती है कि आपको यह सुनिश्चित करना है कि किसी भी प्रकार को मुख्य ऐपडोमेन में निर्मित एक से गुजरना न पड़े, या आप असेंबली को अपने मुख्य ऐपडोमेन में लोड करेंगे। यह आपको रनटाइम पर अपडेट करने में सक्षम होने से रोक देगा।

+1

शैडोकोपीफाइल यहां विशाल है। –

+0

हाँ, हालांकि बैकअप आवश्यकताओं के साथ, यह इस विशिष्ट मामले में एक समस्या से कम हो सकता है। –

+0

बैकअप चरण एक कठिन आवश्यकता नहीं है, यह केवल एक कदम है जो मैं करता हूं ताकि मैं जल्दी से वापस रोल कर सकूं। मैं छायाकोपीफाइल से परिचित नहीं हूं, इसे देखना है। –

1

मैं "हॉट प्लगिंग" असेंबली के लिए एक अच्छा विकल्प के रूप में Castle Windsor पर एक नज़र डालेगा।

यह एक उन्नत और अच्छी तरह से समर्थित आईओसी/डी फ्रेमवर्क है जो आपके द्वारा उल्लेख किए गए कई कार्यों में मदद करता है, वास्तव में फ़ाइलों को लक्ष्य मशीन पर ले जाने के अलावा। यद्यपि असली नलसाजी अच्छी तरह से सीडब्ल्यू के साथ देखभाल की जाएगी।

+0

हम पहले से ही एक आईओसी कंटेनर (एकता) का उपयोग कर रहे हैं, लेकिन मुझे यकीन नहीं है कि यह लोड प्रकारों के हॉट-स्वैपिंग कैसे करेगा। कैसल के पास इस क्षेत्र में कुछ भी है। (वेब साइट पर एक त्वरित रूप से कुछ भी प्रकट नहीं हुआ) –

+0

हाँ। आपको थोड़ी गहरी खुदाई करनी होगी लेकिन गर्म स्वैपिंग सीडब्ल्यू के मुख्य लक्ष्यों में से एक थी (पिछली बार मैंने वैसे भी देखा।) एकता हॉट-स्वैपिंग का समर्थन नहीं करती है? चौंका देने वाला। लेकिन सिर्फ यह तथ्य कि आप पहले ही डीआई फ्रेमवर्क का उपयोग कर रहे हैं, आपको काफी आसानी से माइग्रेट करने में मदद करना चाहिए। –

+0

मुझे लगता है कि यह "हॉट स्वैपिंग" की परिभाषा पर निर्भर करता है। उदाहरण के लिए, यदि आपके पास इंटरफ़ेस के कई कार्यान्वयन हैं तो आप किसी दिए गए कार्यान्वयन को हल कर सकते हैं। लेकिन इसे हल करने के बाद मुझे ठोस कार्यान्वयन को प्रतिस्थापित करने की आवश्यकता है और आवेदन द्वारा उपयोग में है। यह एकता में यह देखने के लिए मेरे पास नहीं हुआ, लेकिन मुझे पूरा यकीन है कि आप ऐसा नहीं कर सकते हैं। कंटेनर बनाने के बाद और एक प्रकार लोड हो जाता है, यह ऐपडोमेन में बहुत ज्यादा फंस जाता है (जब तक मुझे कुछ याद आ रहा है) –

2

हमारे निर्माण सर्वर से, हम सेवा को दूरस्थ रूप से रोकने, नई फ़ाइल कॉपी करने और सेवा को पुनरारंभ करने के लिए एक पावरहेल स्क्रिप्ट का उपयोग करते हैं।

+0

हम लगभग क्रूज़ कंट्रोल.NET से बिल्कुल करते हैं। (कोई शक्ति नहीं)। –