2010-05-27 11 views
11

मैं कई अनुप्रयोगों पर काम कर रहा हूं जो विंडोज सेवा या निर्धारित कार्यों के रूप में चलते हैं।अनुसूचित कार्यों या सेवाओं के लिए गलती गति और विश्वसनीयता की सर्वोत्तम प्रथाएं

अब, मैं यह सुनिश्चित करना चाहता हूं कि ये एप्लिकेशन गलती सहनशील और विश्वसनीय होंगी। उदाहरण के लिए; मेरे पास एक सेवा है जो हर घंटे चलती है। यदि सेवा ऑपरेटिंग या चलते समय क्रैश हो जाती है, तो मुझे डेटा हानि से बचने के लिए, उसी अवधि के लिए एप्लिकेशन को फिर से चलाने के लिए पसंद है (डेटा प्रोसेसिंग के लेनदेन सहित इसमें कई चीजें शामिल हैं)। इसके अलावा, मैं विवरण के साथ त्रुटि की रिपोर्ट करने के लिए कार्यक्रम की तरह हूँ। मेरा लक्ष्य डेटा हानि से बचने और कार्यक्रम चलाने के लिए पीछे नहीं गिरना है।

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

मैं उत्सुक था, यदि नियत कार्यों/विंडोज सेवाओं को गलती सहनशील और विश्वसनीय बनाने के लिए कुछ सर्वोत्तम अभ्यास हैं।

संपादित करें: मैं स्वतंत्र कार्यों या सेवाओं के बारे में बात कर रहा हूं जो विभिन्न सर्वरों पर हैं। और मेरा लक्ष्य यह सुनिश्चित करना है कि सेवा चलती रहेगी, किसी भी विफलता की रिपोर्ट करें और उनसे पुनर्प्राप्त करें।

+0

मैं यह सोच रहा था! – Brandi

+0

सबसे अच्छा विज्ञापित मैंने पाया है FireDaemon है। यह सुनिश्चित नहीं है कि यह कैसे चलता है, मैं अब इसकी जांच करने के बीच में हूं। लेकिन इसकी विज्ञापित विशेषताएं बहुत अच्छी हैं। –

+0

धन्यवाद, मैंने इसे जांच लिया था। मैं इसे कोड करता हूं और उस पर नियंत्रण रखता हूं। – DarthVader

उत्तर

6

मैं में जो दूसरे लोग क्या कहना है इसमें रुचि है, लेकिन मैं आपको कुछ बिंदुओं है कि मैं भर में ठोकर खाई गए देंगे:

  1. बिना क्रिया के अपवाद के लिए एक ईवेंट हैंडलर करें। इस तरह आप संसाधनों को साफ कर सकते हैं, एक लॉग फ़ाइल को लिख सकते हैं, एक व्यवस्थापक को ईमेल कर सकते हैं, या जो कुछ भी आपको क्रैश होने की बजाय चाहिए।

    AppDomain.CurrentDomain.UnhandledException + = नया UnhandledExceptionEventHandler (AppUnhandledExceptionEventHandler);

  2. किसी भी सेवाबेस ईवेंट हैंडलर को ओवरराइड करें जो आपको अपने आवेदन के मुख्य भाग में चाहिए। ऑनस्टार्ट और ऑनस्टॉप बहुत महत्वपूर्ण हैं, लेकिन कई अन्य लोग आप उपयोग कर सकते हैं। http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase%28v=VS.71%29.aspx

  3. टाइमर से सावधान रहें। विंडोज फॉर्म टाइमर एक सेवा में सही काम नहीं करेगा। उपयोगकर्ता सिस्टम। थ्रेडिंग। टाइमर या सिस्टम। टिमर्स। टाइमर। Best Timer for using in a Windows service

  4. यदि आप थ्रेड पर अपडेट कर रहे हैं, तो सुनिश्चित करें कि आप सब कुछ थ्रेडसेफ सुनिश्चित करने के लिए मुख्य खंडों में लॉक() या मॉनीटर का उपयोग करें।

  5. किसी भी उपयोगकर्ता विशिष्ट उपयोगकर्ता का उपयोग न करने के लिए सावधान रहें, क्योंकि सेवा किसी विशिष्ट उपयोगकर्ता संदर्भ के बिना चलता है। मैंने देखा कि मेरे कुछ SQL कनेक्शन स्ट्रिंग अब विंडोज प्राधिकरणों आदि के लिए काम नहीं कर रहे थे। साथ ही लोगों को मैप किए गए ड्राइव के साथ परेशानी होने का भी सुना है।

  6. कभी भी यूआई के साथ सेवा न करें। असल में विस्टा और 7 के लिए वे वैसे भी करना लगभग असंभव बनाते हैं।इसे उपयोगकर्ता इंटरैक्शन की आवश्यकता नहीं होनी चाहिए, जितना अधिक आप कर सकते हैं WIN32 फ़ंक्शन के साथ एक संदेश भेजना है। एमएसडीएन का दावा है कि इंटरैक्टिव सेवाएं बनाना बुरा अभ्यास है। http://msdn.microsoft.com/en-us/library/ms683502%28VS.85%29.aspx

  7. डीबगिंग उद्देश्यों के लिए, एक कंसोल एप्लिकेशन के रूप में सेवा चलाने के लिए यह बहुत अच्छा तरीका है जब तक कि आप इसे प्राप्त करने के लिए इसे प्राप्त न करें। बहुत बढ़िया ट्यूटोरियल: http://mycomponent.blogspot.com/2009/04/create-debug-install-windows-service-in.html

वैसे भी, उम्मीद है कि एक छोटे से मदद करता है, लेकिन वह केवल कुछ ही बात मैं अपने दम पर खोजने के लिए चारों ओर poked है।

0

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

सामान्य रूप से सामान्य व्यावसायिक घंटों के बाहर चलाने के लिए कार्यों को शेड्यूल करें - रात में स्पष्ट रूप से।

+0

मैं स्वतंत्र कार्यों या सेवाओं के बारे में बात कर रहा था जो विभिन्न सर्वरों पर। और मेरा लक्ष्य यह सुनिश्चित करने के लिए कि सेवा चलती रहेगी, किसी भी विफलताओं की रिपोर्ट करें और न्यूनतम या कोई डेटा हानि से उन्हें पुनर्प्राप्त करें। – DarthVader