मैं भी एक सेवा कुछ ही सेकंड/मिनट लगते हैं हो सकता है जो एक अच्छी शुरुआत के लिए का सामना करना पड़ा। जब सेवा शुरू होती है, तो यह SQL सर्वर से कनेक्ट करने का प्रयास करता है। हालांकि, जब पूरा सर्वर पुनरारंभ किया गया था, तो मेरी सेवा SQL सर्वर से पहले शुरू हो रही थी। (मुझे सेवा निर्भरता के बारे में पता है लेकिन यह किसी विशेष कारण के लिए मेरी स्थिति पर लागू नहीं होता ....)। मैंने SQL सर्वर से कनेक्ट करने के लिए 10 बार कोशिश करने के लिए एक लूप करने की कोशिश की, लेकिन टाइमआउट की वजह से विंडोज दूसरी कोशिश से पहले मेरी सेवा को मार रहा था।
मेरा समाधान: मैंने अपनी सेवा के "ऑनस्टार्ट()" में एक टाइमर जोड़ा। फिर, सेवा की "ऑनटिक()" विधि SQL सर्वर से कनेक्ट करने के लिए 10 बार कोशिश कर रही थी (इसमें 30 की प्रतीक्षा के साथ)। स्टार्टअप पर टाइमआउट नहीं।
तो बुनियादी तौर पर,
- मेरी सेवा 5 सेकंड में शुरू होता है।
- सेवा के शुरू होने के 10 सेकंड बाद एक टाइमर लॉन्च किया गया है।
- टाइमर एसक्यूएल सर्वर से कनेक्ट होने पर 10 बार [हर बार 30 सेकंड प्रतीक्षा]] पर प्रयास करता है।
- यदि यह सफल होता है, तो टाइमर स्वयं को अक्षम कर देगा, अगर नहीं (10 कोशिश के बाद), तो मैं सेवा को रोकता हूं।
नोट समस्या को हल करने के लिए और अधिक सुरुचिपूर्ण तरीका लेकिन शायद मेरी समाधान मुझ से एक ही स्थिति में किसी को भी मदद मिल सकती है के कुछ हिस्से,
भालू ध्यान में रखें कि यदि कोई अन्य सेवा स्वयं पर निर्भर है तो संभवतः यह आपकी सेवा को SERVICE_RUNNING पोस्ट करने के बाद पूरी तरह कार्यात्मक होने की उम्मीद करेगी। SERVICE_RUNNING पोस्ट करने से पहले अपने प्रारंभिकरण के _all_ को पूरा करने का एक अच्छा कारण है, और SetServiceStatus के साथ आवश्यक होने पर अधिक समय मांगना। –