2012-07-26 10 views
5

मुझे लगता है कि सभी निष्पादन तुरंत समाप्त हो जाता है और कॉलिंग एंड को टाइमआउट मिलता है। जब आप किसी सेवा को रोकते हैं तो वास्तव में क्या होता है, और आपके पास कितना नियंत्रण होता है?क्या होता है यदि मैं डब्लूसीएफ अनुरोध को संसाधित करते समय अपनी विंडोज सेवा को रोकता हूं?

+1

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

+0

क्या आपने इसका परीक्षण किया है? आपका रिजल्ट क्या था? – Bernard

+1

मैं सही उत्तर लिखूंगा ... लेकिन दोस्त ... इसे अपने आप परीक्षण करें! इसे स्वयं परीक्षण करने में केवल कुछ सेकंड लगते हैं। – Eiver

उत्तर

4

जब सेवा नियंत्रण प्रबंधक आपकी सेवा को रोकने के लिए कहता है, .NET ServiceBase सेवा को SERVICE_STOP_PENDING पर सेट करता है और आपकी सेवा की ऑनस्टॉप विधि को कॉल करता है। आप उस अधिसूचना के साथ क्या करते हैं आप पर निर्भर है। आदर्श रूप में, आपके पास वर्तमान में काम करने वाले किसी भी थ्रेड को सूचित करने के लिए रद्दीकरण टोकन के उपयोग जैसे कुछ तंत्र होंगे, जिन्हें उन्हें इसे लपेटने और जितनी जल्दी हो सके बाहर निकलने की आवश्यकता है। आपके मामले में इसमें आपके सर्विसहोस्ट को बंद करना शामिल हो सकता है। आपकी ऑनस्टॉप विधि को तब तक इंतजार करना चाहिए जब तक कि यह पता न हो कि लौटने से पहले पूरा हो गया है (उदाहरण के लिए धागे में शामिल होकर)। सेवा नियंत्रण प्रबंधक को सूचित करने के तरीके हैं जिन्हें आपको अधिक समय चाहिए, या सिर्फ यह बताने के लिए कि आपको अधिसूचना मिली है और आप सक्रिय रूप से रोक रहे हैं (SERVICE_STATUS dwcheckpoint)।

यदि आप तुरंत अपने ऑनस्टॉप से ​​वापस लौटते हैं (या इसे लागू करने से परेशान नहीं करते हैं), तो मुझे लगता है कि आपकी सेवा के धागे को जबरन जबरन समाप्त कर दिया जाएगा। मैं निश्चित रूप से नहीं जानता, क्योंकि मैंने कभी कोशिश नहीं की है। मैं हमेशा ऑनस्टॉप को लागू करता हूं, और केवल सबकुछ साफ होने के बाद ही लौटता हूं। यदि आप ऑनस्टॉप को कार्यान्वित करते हैं, लेकिन सेवा नियंत्रण प्रबंधक को यह बताए बिना वापस लौटने में बहुत लंबा समय लगता है कि आप इस पर काम कर रहे हैं, तो यह थोड़ी देर इंतजार करेगा (सेवा रोकने के लिए 20 सेकंड ... यह एक रजिस्ट्री सेटिंग है) और फिर अपने धागे को समाप्त करें।

सही काम करना आपकी सेवा लिखना है ताकि यह जल्दी से शुरू हो जाए, जल्दी से रुक जाए, रोकें और जल्दी से जारी रहें। जैसा कि आप ऊपर दिए गए विवरण से देख सकते हैं, वास्तव में आपके मामले में क्या होता है, यह पूरी तरह से निर्भर करता है कि आपका सेवा लागू की गई थी। केवल आपके पास "निश्चित रूप से जानना" जानकारी है।

http://blogs.msdn.com/b/bclteam/archive/2009/02/19/in-depth-how-net-managed-services-interact-with-the-servicecontrolmanager-scm-kim-hamilton.aspx

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