2009-04-23 16 views
6

में नौकरी शेड्यूलर की आवश्यकता है हमारे पास एक ऐसी वेबसाइट है जहां हमें विशिष्ट समय पर सूचनाएं (ई-मेल) प्राप्त करने के लिए शेड्यूलर की आवश्यकता होती है। जैसे। 4:45 बजे बैठक में भाग लेने के लिए 5 बजे अनुस्मारक स्थापित करने वाला व्यक्ति, उसी बारे में 4:45 बजे ईमेल प्राप्त करेगा।एएसपीनेट

चूंकि यह साइट साझा सर्वर पर होस्ट की जाती है, इसलिए हमारे पास SQL ​​सर्वर या शेड्यूलर एप्लिकेशन चलाने के लिए सर्वर पर कोई नियंत्रण नहीं है।

क्या एएसपीनेट में कुछ भी है जो इस परिदृश्य में मदद कर सकता है?

उत्तर

9

इस बारे में: Simulate a Windows Service using ASP.NET to run scheduled jobs

एक बिंदु पर यह तकनीक used on Stack Overflow थी, हालांकि मुझे नहीं लगता कि यह और भी है।

ईमानदार होने के लिए यह मुझे एक बुरा, त्रुटि-प्रवण हैक जैसा लगता है, लेकिन यदि आप अपनी वेबसाइट को छोड़कर सर्वर पर कुछ भी चलाने में असमर्थ हैं तो ऐसा कुछ शायद आपका एकमात्र विकल्प है।

+0

100% उस विधि के विश्लेषण से सहमत हैं। हालांकि, जब तक आप इसमें शामिल सीमाओं को समझते हैं (आईई: कि "निर्धारित" नौकरी ठीक से चलने पर ठीक नहीं हो सकती है) तो यह एक अच्छा समाधान हो सकता है। – NotMe

2

एएसपी.नेट के साथ आपको गारंटी नहीं है कि आपका ऐप हर समय जिंदा है, और इस प्रकार वेब अनुप्रयोगों को शेड्यूलिंग समाधान के लिए मेजबान प्रक्रिया के रूप में व्यवहार्य आईएमओ नहीं है।

एक विंडोज सेवा आपको इस परिदृश्य के लिए आवश्यक है। प्रक्रिया शुरू करने और रोकने के साथ-साथ एप्लिकेशन की निगरानी के तरीकों पर आपका पूरा नियंत्रण है।

क्या आप ऐसी मशीन को किसी अन्य मशीन पर होस्ट करने में सक्षम हैं? यहां तक ​​कि यदि होस्ट किए गए सर्वर पर वेब एप्लिकेशन चल रहा है, तो इसका मतलब यह नहीं है कि आपको शेड्यूलर को उसी सर्वर पर चलाना होगा।

+0

इसके अतिरिक्त, विंडोज़ सेवा कार्य को दूर करने, चीजों को और सरल बनाने के लिए बस अपनी होस्टेड साइट पर एक वेब सेवा कॉल कर सकती है। –

1

यदि आपके पास वास्तव में सर्वर पर कोई नियंत्रण नहीं है (यानी, आप एक एसक्यूएल नौकरी, एक निर्धारित कार्य का उपयोग नहीं कर सकते हैं, या एक विंडोज सर्वर स्थापित नहीं कर सकते हैं) तो आप System.Threading.Timer का उपयोग कर सकते हैं जिसे आपने अपने ग्लोबल.एक्सएक्स में शुरू किया है (उदाहरण के लिए, एप्लिकेशन स्टार्टअप पर) जो हर एक्स मिनट में आपके एप्लिकेशन में एक निश्चित विधि का आह्वान करता है। यह विधि तब आपके डेटाबेस से पूछेगी और देखें कि किन सूचनाओं को भेजने की आवश्यकता है।

यह वास्तव में एक वांछनीय दृष्टिकोण नहीं है, क्योंकि टाइमर को हमेशा के रूप में आमंत्रित करने की गारंटी नहीं है, क्योंकि पीटर कहते हैं, आपके वेब एप्लिकेशन को हर समय जिंदा रहने की गारंटी नहीं है।

हालांकि, आपकी आवश्यकताओं के आधार पर, यदि आपके पास कोई अन्य विकल्प नहीं है तो यह अभी भी 'पर्याप्त पर्याप्त' दृष्टिकोण हो सकता है।

1

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

आप अपने Global.asax.cs फ़ाइल में एक System.Timers.Timer उदाहरण बनाकर देखो सकता है। सामान्य रूप से एक बीत चुके घटना अप तार, और यह है कि जिसमें

protected void myTimer_Elapsed(object sender, EventArgs e) 
{ 
    if(System.DateTime.Now Falls in Some Configured Time-Window) 
     //Do Stuff 
} 

की लेकिन जैसे किसी ने कहा, अपने आईआईएस के रूप में गारंटी है कि इस अवधि के दौरान किया जा सकता है को रीसेट नहीं पंक्तियों के साथ कुछ, करता है कुछ कोड दे अगर आप इसे याद करेंगे।

0

यह वास्तव में करना वांछनीय नहीं है, लेकिन आप ऐसा कर सकते हैं जो रैज़ी सुझाव दे रहा है। मैंने इसे कई बार देखा है। हालांकि बदसूरत, कभी-कभी आपको बदसूरत हैक्स करना पड़ता है।

हालांकि इस विधि का उपयोग करके, आपको यह सुनिश्चित करना होगा कि आप एप्लिकेशन को अनलोड नहीं किया गया है। तो आपको जिंदा रखने के किसी प्रकार की जरूरत है। मैं एक वेब निगरानी उपकरण स्थापित करने का सुझाव दूंगा जो एप्लिकेशन को जीवंत रखने के लिए लगातार एक पृष्ठ (एएसपीएक्स) खींच लेगा।ये लोग मुफ्त हैं http://mon.itor.us/

+1

मुझे लगता है कि @Arjan Einbu सुझाव देता है कि यह बेहतर होगा। Http://mon.itor.us की तरह कुछ आवश्यक बाहरी पृष्ठ अनुरोधों को स्थापित करने के लिए एक बहुत ही सरल तरीका दिखता है। – codeape

+0

फिर आपके ऐप पर निर्भरता है कि दूसरी मशीन को चलाना है और आपको इसे याद रखना होगा;) मैं भूल जाऊंगा या अपडेट आदि के कारण मशीन रीबूट हो जाएगी .. किसी भी तरह से आप इसे करते हैं ... ये सभी हैं बदसूरत हैक्स;) –

4

आपको सर्वर पर कोई काम करने की ज़रूरत है, लेकिन आपके पास ASP.NET से इसे ट्रिगर करने का कोई अच्छा तरीका नहीं है?

एक वेबपृष्ठ बनाने के बारे में जो आपकी नौकरी शुरू करेगा, और एक टाइमर कहीं और चलाएगा (यानी दूसरे कंप्यूटर पर) जो उस पृष्ठ का अनुरोध करता है। (बस आपको नौकरी ट्रिगर करने के लिए पेज पर टक्कर मारना)

+1

+1 आईएमओ, यह पूरा करने के लिए यह सबसे आसान, सबसे विश्वसनीय तरीका है। – codeape

+0

सरल, हाँ। लेकिन भरोसेमंद ?? –

+1

@joel mueller: हाँ, क्यों नहीं? –

3

मुझे आपके जैसी ही समस्या थी और मैं एक प्रोग्रामिंग के साथ समाप्त हुआ जो क्वार्ट्ज.NET: http://quartznet.sourceforge.net/ का उपयोग करता है और वेबसाइट के समान डेटाबेस से कनेक्ट होता है।

-1

मैं आपको विश्वास नहीं करता, क्योंकि क्वार्ट्ज.Net (1.0 और 1.0.1) का स्रोत कोड Visual Studio.Net 2005 और 2008 के अंतर्गत संकलित नहीं होता है। Quartz.Net को प्राप्त करने का एकमात्र तरीका संपूर्ण उपयोग करना है Spring.Net पैकेज, जो VS.Net 2005 और 2008

के तहत ठीक से संकलित करता है जब तक आप कुछ टिप्स साझा नहीं कर सकते, कैसे comppz.dll को एएसपीनेट प्रोजेक्ट में संकलित और उपयोग करने के लिए! (Quartz.Net का वेब पेज और readme.txt स्रोत coude संकलन पर कोई जानकारी प्रदान नहीं करता है) प्रत्येक टिप का स्वागत है!

0

मैं तुम्हें belive नहीं है क्योंकि Quartz.Net के स्रोत कोड (1.0 और 1.0.1) दृश्य Studio.Net 2005 और 2008 एक ही रास्ता क्वार्ट्ज प्राप्त करने के लिए नीचे संकलन नहीं है नेट जब तक आप कुछ सुझाव साझा कर सकता है, कैसे संकलन और asp.net परियोजना में quartz.dll उपयोग करने के लिए पूरे Spring.Net पैकेज है, जो VS.Net 2005 के तहत ठीक और 2008

संकलित उपयोग करने के लिए है! ( का वेब पेज Quartz.Net और readme.txt स्रोत coude संकलन पर कोई जानकारी प्रदान नहीं करता है) प्रत्येक टिप का स्वागत है!

मुझे पहले भी परेशानी थी, लेकिन ऐसा इसलिए है क्योंकि आवश्यक AsemblyInfo.cs मूल फ़ोल्डर में निहित है। साथ ही, आपको शामिल तीन डीएलएल जोड़ने की आवश्यकता होगी।