asp.net - अनुसूचित कार्यों को चलाने का सबसे अच्छा तरीका




windows iis (11)

.NET के लिए एक नया कार्य शेड्यूलर क्लास लाइब्रेरी

नोट: चूंकि यह लाइब्रेरी बनाई गई थी, इसलिए माइक्रोसॉफ्ट ने विंडोज विस्टा के लिए एक नया कार्य शेड्यूलर (टास्क शेड्यूलर 2.0) पेश किया है। यह लाइब्रेरी कार्य शेड्यूलर 1.0 इंटरफ़ेस के लिए एक रैपर है, जो अभी भी Vista में उपलब्ध है और Windows XP, Windows Server 2003 और Windows 2000 के साथ संगत है।

http://www.codeproject.com/KB/cs/tsnewlib.aspx

आज हमने अपनी एएसपी.नेट वेबसाइट के लिए निर्धारित कार्यों को चलाने के लिए एक कंसोल एप्लिकेशन बनाया है। लेकिन मुझे लगता है कि यह दृष्टिकोण थोड़ी सी त्रुटि प्रवण है और बनाए रखना मुश्किल है। आप अपने निर्धारित कार्य को कैसे निष्पादित करते हैं (विंडोज़ / आईआईएस / एएसपी.नेट पर्यावरण में)

अद्यतन करें:

कार्यों के उदाहरण:

  • डेटाबेस में ईमेल-कतार से ईमेल भेजना
  • डेटाबेस से पुरानी वस्तुओं को हटा रहा है
  • Google AdWords से आंकड़े पुनर्प्राप्त करना और डेटाबेस में एक तालिका भरें।

आप आसानी से एक विंडोज सेवा बना सकते हैं जो 'ThreadPool.RegisterWaitForSingleObject' विधि का उपयोग करके अंतराल पर कोड चलाता है। यह वास्तव में चिकना है और स्थापित करने के लिए काफी आसान है। फ्रेमवर्क में किसी भी टाइमर का उपयोग करने के लिए यह विधि एक और सुव्यवस्थित दृष्टिकोण है।

अधिक जानकारी के लिए नीचे दिए गए लिंक पर नज़र डालें:

विंडोज सेवा का उपयोग कर .NET में एक आवधिक प्रक्रिया चलाना:
http://allen-conway-dotnet.blogspot.com/2009/12/running-periodic-process-in-net-using.html


एक कस्टम विंडोज सेवा बनाएँ।

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

ऐसा कहकर, मैं अभी भी अपने अधिकांश गैर-महत्वपूर्ण रखरखाव कार्यों के लिए अनुसूचित कंसोल ऐप्स का उपयोग करता हूं। यदि यह तोड़ नहीं है, तो इसे ठीक न करें।


एक विकल्प विंडोज़ सेवा स्थापित करना होगा और इसे अपने निर्धारित कार्य को कॉल करने के लिए प्राप्त करना होगा।

Winforms में मैंने टाइमर का इस्तेमाल किया है, ऐसा नहीं लगता कि यह एएसपी.नेट में अच्छी तरह से काम करेगा


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

इसे चलाने का एक और सुविधाजनक तरीका पिंगडम जैसे निगरानी सेवा का उपयोग करना है। अपने http चेक को उस पृष्ठ पर इंगित करें जो आपका सेवा कोड चलाता है। पेज रिटर्न परिणाम प्राप्त करें, जिसका उपयोग पिंगडम ट्रिगर करने के लिए किया जा सकता है ताकि चेतावनी संदेश भेजने के लिए कुछ सही न हो।


पहिया को फिर से शुरू करें, थ्रेडिंग और टाइमर वर्ग का उपयोग करें।

    protected void Application_Start()
    {
        Thread thread = new Thread(new ThreadStart(ThreadFunc));
        thread.IsBackground = true;
        thread.Name = "ThreadFunc";
        thread.Start();
    }

    protected void ThreadFunc()
    {
        System.Timers.Timer t = new System.Timers.Timer();
        t.Elapsed += new System.Timers.ElapsedEventHandler(TimerWorker);
        t.Interval = 10000;
        t.Enabled = true;
        t.AutoReset = true;
        t.Start();
    }

    protected void TimerWorker(object sender, System.Timers.ElapsedEventArgs e)
    {
        //work args
    }

मैंने इसे शामिल सभी के लिए आसान पाया है:

  • DoSuchAndSuchProcess जैसे webservice विधि बनाएं
  • एक कंसोल ऐप बनाएं जो इस वेबमाइड को कॉल करता है।
  • कार्य शेड्यूलर में कंसोल ऐप को शेड्यूल करें।

इस पद्धति का उपयोग करना आपके व्यवसाय ऐप में सभी व्यवसाय तर्क निहित है, लेकिन आपके पास विंडोज़ टास्क मैनेजर, या किसी अन्य वाणिज्यिक कार्य प्रबंधक की विश्वसनीयता है, इसे बंद करने और निष्पादन रिपोर्ट जैसी किसी भी वापसी की जानकारी रिकॉर्ड करने के लिए। किसी पृष्ठ पर पोस्ट करने की बजाय वेब सेवा का उपयोग करना थोड़ा सा लाभ होता है क्योंकि किसी webservice से डेटा वापस करना आसान होता है।


मैंने एएसपी.नेट परियोजना में सफलतापूर्वक Abidar उपयोग किया है (यहां कुछ Abidar )।

इस विधि के साथ एकमात्र समस्या यह है कि यदि एएसपी.NET वेब अनुप्रयोग स्मृति से अनलोड किया जाता है (यानी कम उपयोग के कारण) कार्य नहीं चलाएंगे। एक चीज जिसकी मैंने कोशिश की थी, इसे हर 5 मिनट में वेब एप्लिकेशन को हिट करने के लिए एक कार्य बना रहा है, इसे जीवित रखते हुए, लेकिन यह विश्वसनीय रूप से काम नहीं कर रहा था, इसलिए अब मैं इसके बजाय ऐसा करने के लिए विंडोज शेड्यूलर और मूल कंसोल एप्लिकेशन का उपयोग कर रहा हूं।

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


यह पुस्तकालय एक आकर्षण की तरह काम करता है http://www.codeproject.com/KB/cs/tsnewlib.aspx

यह आपको सीधे अपने .NET कोड के माध्यम से विंडोज शेड्यूल किए गए कार्यों को प्रबंधित करने की अनुमति देता है।


यहां एक और तरीका है:

1) एक "दिल की धड़कन" वेब स्क्रिप्ट बनाएं जो कार्य को लॉन्च करने के लिए ज़िम्मेदार है यदि वे डीयूई या लॉन्च होने के लिए अतिदेय हैं।

2) कहीं भी एक निर्धारित प्रक्रिया बनाएं (वही वेब सर्वर पर प्राथमिकता) जो वेबस्क्रिप्ट को हिट करती है और इसे नियमित अंतराल पर चलाने के लिए मजबूर करती है। (उदाहरण के लिए विंडोज शेड्यूल कार्य जो चुपचाप IE या whathaveyou का उपयोग करके हीटबीट स्क्रिप्ट लॉन्च करता है)

तथ्य यह है कि एक वेब स्क्रिप्ट के भीतर कार्य कोड निहित है, वेब कोड कोड-बेस के भीतर कोड को रखने के लिए पूरी तरह से है (धारणा यह है कि दोनों एक-दूसरे पर निर्भर हैं), जो कि वेब डेवलपर्स के प्रबंधन के लिए आसान होगा ।

वैकल्पिक दृष्टिकोण निष्पादन योग्य सर्वर स्क्रिप्ट / प्रोग्राम बनाना है जो सभी शेड्यूल स्वयं ही कार्य करता है और निष्पादन योग्य स्वयं को शेड्यूल किए गए कार्य के रूप में चलाता है। यह वेब अनुप्रयोग और निर्धारित कार्य के बीच मौलिक decoupling के लिए अनुमति दे सकता है। इसलिए यदि आपको अपने निर्धारित कार्यों को यहां तक ​​कि चलाने के लिए भी आवश्यक है कि वेब ऐप / डेटाबेस डाउन या पहुंच योग्य हो, तो आपको इस दृष्टिकोण के साथ जाना चाहिए।


जेक एटवुड फॉर स्टैक ओवरफ्लो द्वारा यह तकनीक सबसे आसान तरीका है जो मैंने पार किया है। यह एएसपी.NET के कैश सिस्टम में "कैश आइटम हटा दिया गया" कॉलबैक तंत्र पर निर्भर करता है

अद्यतन: इस विधि को बढ़ा दिया है। यह केवल तभी काम करता है जब वेबसाइट चल रही है लेकिन यह एक बहुत ही सरल तकनीक है जो कई लोगों के लिए उपयोगी है।

Quartz.NET भी देखें





scheduled-tasks