2011-05-28 12 views
7

पर निर्भर है मैंने विंडोज सेवा विकसित की है, जो विंडोज स्टार्टअप के दौरान स्वचालित रूप से प्रारंभ होनी चाहिए। यह सेवा एक Oracle डाटाबेस से जुड़ता है, इसलिए मैं अपने सेवा अनुसूचित जाति कमांड लाइन उपयोगिता से ओरेकल सेवा पर निर्भर बना दिया: अनुसूचित जाति config MyService निर्भर = OracleServiceXE/OracleXETNSListenerविंडोज स्टार्टअप पर स्वचालित रूप से विंडोज सेवा शुरू करना जो ओरेकल

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

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

तो, मैं विंडोज स्टार्टअप पर स्वचालित रूप से अपनी सेवा कैसे शुरू कर सकता हूं जो ओरेकल डीबी कनेक्शन पर निर्भर है?

मेरी सेवा वी # 2010 पर्यावरण में सी # पर .Net 4 प्लेटफॉर्म पर विकसित की गई थी।

Pls। मेरी मदद करो, यह वास्तव में एक महत्वपूर्ण कार्य है!

उत्तर

10

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

  • तथ्य यह है कि यह शुरू कर दिया है
  • लोड config फ़ाइलें/रजिस्ट्री/आदि से किसी भी लागू विन्यास के लिए लॉग इन
  • स्पिन-अप एक धागा है कि कोशिश करेंगे और सेवा "प्रारंभ करेंगे" ठीक से हर एन सेकंड, और जब तक यह छोड़ देता है एम बार दोहराएगा। अपनी कॉन्फ़िगरेशन फ़ाइल/रजिस्ट्री

लागू ओरेकल सर्वर से कनेक्ट करने के लिए "कोशिश करें" धागा है और यदि यह विफल हो जाता है, तो एन सेकंड के लिए सोने के लिए जाएं, और यह एम बार करें। यदि यह सफल होता है तो यह उस "मांस" को शुरू कर सकता है जो इसे माना जाता है।

विडंबना यह है कि यह संभवतः तथ्य यह है कि ओरेकल सेवा आपके द्वारा प्रस्तावित किए गए कुछ समान काम करती है जो आपको समस्या का कारण बनती है। जब यह शुरू हो गया है, तो "हाँ, मैंने" विंडोज़ को वापस शुरू कर दिया है, यह आपकी सेवा को तब लोड करने की इजाजत देता है, भले ही ओरेकल अभी भी कताई में व्यस्त है। आदर्श रूप से आपके अनुरोधों को अस्वीकार करने के बजाय इस परिदृश्य में, ओरेकल को तैयार होने पर प्रसंस्करण के लिए उन्हें अवश्य देना चाहिए।

+0

आपका उत्तर Thx। यह मेरे लिए बहुत बुरा लगता है :(। मेरी सेवा को कॉन्फ़िगरेशन फ़ाइल (mysql, ms access, sqlite ...) में सेट किया गया था 'किसी भी प्रकार के डीबी' से कनेक्ट होना चाहिए, इसलिए यह विभिन्न डीबी-एस का उपयोग करके चलाया जा सकता है। ओरेकल के मामले में केवल इस तरह की समस्या है। इसलिए मेरे लिए ओरेकल की वजह से मेरे ऐप को दोबारा देना बहुत बुरा लगता है। मैंने सोचा कि वहां एक और अधिक कठोर समाधान है। :(फिर थक्स! – Tom

+1

@ केलर, आप कर सकते हैं यह सुनिश्चित न करें कि * कोई भी * डेटाबेस सर्वर इस व्यवहार को प्रदर्शित नहीं करेगा, इसलिए यह आपकी सेवा में इस तरह की "लचीलापन" डालने से कोई दिक्कत नहीं कर सकता है। परेशान, लेकिन दुनिया खत्म नहीं! दूसरा लाभ जो आप अलग से प्राप्त करते हैं सेवा के मूल से आपका "व्यवसाय तर्क" ही टेस्टेबिलिटी है; विंडोज सेवा की "ऑनस्टार्ट" विधि में बंधे कोड के लिए परीक्षण लिखना बहुत आसान है =) – Rob

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