2013-05-31 4 views
5

मेरे पास एक सवाल है कि सेवा अभी भी चल रही है या नहीं।यह जांचने का सबसे अच्छा तरीका है कि कोई सेवा लगी है

पहले स्पष्टीकरण का थोड़ा सा। मेरे पास सेवा एक सी # एप्लिकेशन है जिसे या तो कमांड लाइन से चलाया जा सकता है या विंडोज सेवा के रूप में चलाया जा सकता है। सेवा का कार्य दूरस्थ तृतीय पक्ष डेटा स्रोत में परिवर्तनों की जांच करना और उन्हें अपने स्थानीय डेटा स्टोर में जोड़ने से पहले उन परिवर्तनों को संसाधित करना है।

मैं यह पहचानने में सक्षम होना चाहता हूं कि सेवा ने किसी भी कारण से काम करना बंद कर दिया है, और जब संभव हो तो यह किसी को सूचित करता है। इस पर ध्यान दिए बिना कि सेवा को Windows सेवा या कमांड लाइन से चलाया जा रहा है या नहीं।

मैंने पहले से ही परिवर्तन के लिए स्थानीय डेटा स्टोर की निगरानी करने और निर्धारित समय के लिए परिवर्तन नहीं होने पर सूचित किया है, हालांकि यह एक बहुत ही असंगत साबित हुआ है, क्योंकि तीसरे पक्ष में परिवर्तन की आवृत्ति डेटा स्रोत परिवर्तनीय है, जिसका अर्थ है कि परिवर्तनों की लंबी अवधि में यह इंगित नहीं करता है कि सेवा ने काम करना बंद कर दिया है, यह हो सकता है कि कोई बदलाव न हो!

क्या इस बारे में कोई सुझाव है कि मैं इस पर निगरानी के बारे में कैसे जा सकता हूं? किसी को भी ऐसा कुछ अनुभव के साथ काम कर रहा है?

धन्यवाद, एम

संपादित करें 1 बस कैसे काम करता है सेवा का मोटा अनुमान देने के लिए: 3 पार्टी सेवा घटनाओं को जन्म देती है जब नए/अपडेट डेटा उपलब्ध तो मेरी सेवा बैठता है और इन घटनाओं के लिए इंतजार कर रहा है उठाए गए कार्यक्रम में लौटाए गए डेटा को उठाया और संसाधित किया जाएगा। इसलिए, "सेवा दुर्घटनाग्रस्त" की बजाय "कोई परिवर्तन नहीं" होने पर यह पहचानना मुश्किल है।

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

+0

क्या आपकी सेवा में किसी प्रकार का मतदान लूप है? –

+0

क्या आप हमें अपनी सेवा की वास्तव में क्या एक छद्म रूपरेखा दिखा सकते हैं? हम दिल की धड़कन के कुछ रूपों को स्थापित करने के लिए किसी स्थान की पहचान करने में मदद कर सकते हैं। – KingCronus

उत्तर

-1

इस परियोजना के लिए काम किया गया समाधान यह है कि सेवा को मुझे इसकी उपलब्धता के बारे में सूचित करने के लिए कार्यान्वयन की तरह दिल की धड़कन का उपयोग करना था।

क्योंकि हमारा एप्लिकेशन वेबएपीआई का उपयोग करता है, इसलिए मैं एक एंडपॉइंट स्थापित करने में सक्षम था, जो सेवा हर [x] सेकंड "पिंग" करती है।

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

मैं ServiceController का उपयोग कर को देखा, लेकिन वह संभावना है कि सेवा को जोड़ा गया कार्यक्षमता Windows सेवा के बजाय एक Windows कंसोल आवेदन के रूप में चलाया जा सकता है की वजह से एक आदर्श समाधान होने के लिए नहीं जा रहा था।

4

आप एक 'दिल की धड़कन' की तरह कुछ विचार करना चाह सकते:

Heartbeat activity for Windows Service

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

Start > Run > Services.msc > Right Click Service > Properties > Recovery Options 

आप अपने आवेदन ठीक से अपवाद का उपयोग करें और उन्हें उचित रूप से संभाल करने के लिए डिज़ाइन करते हैं तो आप कभी भी अपने सेवा 'के लिए फांसी के साथ एक समस्या नहीं होनी चाहिए:

विंडोज ही तरीकों की एक किस्म भी मदद करने के लिए है कुछ कारण'।

अतिरिक्त:

वहाँ आप के लिए कोई रास्ता नहीं है "कोई काम की जरूरत" और एक लटका के बीच का अंतर तय करते है?

+0

सबसे बुरी चीज यह है कि यदि सेवा बहुप्रचारित है और livelock या deadlock हो रहा है। –

+0

@ मैथ्यू वॉटसन हाँ, दिल की धड़कन उसमें मदद कर सकती है, लेकिन मैं अभी भी मूल कारण पर विचार करना चाहता हूं। डेडलॉक्स और लाइवेलॉक्स को हमेशा उचित थ्रेडसेफ प्रोग्रामिंग का उपयोग करके सही किया जा सकता है। – KingCronus

0

आप सेवाओं की निगरानी के लिए सेवा नियंत्रक कक्षा का उपयोग कर सकते हैं।

मुझे अपनी परियोजनाओं में से एक में एक ही समस्या का सामना करना पड़ा।

मैंने अपनी सेवा की निगरानी के लिए नीचे दिए गए दृष्टिकोण का उपयोग किया।

  • पहली बात, मैं लॉग इन सभी जानकारियां, इस

कस्टम EventID की तरह एक मानक प्रारूप में घटना दर्शक को मेरी सेवा से त्रुटियों | datetime | संदेश

  • फिर मैंने एक और अधिसूचना सेवा बनाई है जो विशेष घटनाओं के लिए ईवेंट व्यूअर को सुनेंगे, ईवेंट प्रविष्टि
  • से संदेश पढ़ता है
  • अगर घटना प्रविष्टि घटना दर्शक में गिर जाता है यह smtp
  • के माध्यम से मेल सूचना भेजेगा अगर आप SMPT साथ नहीं दिया जाता है तो खिड़कियों आवेदन जो घटनाओं को सुनने के लिए जाने के लिए और baloon या संदेश बॉक्स का उपयोग कर संदेश से पता चलता
संबंधित मुद्दे

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