2009-06-19 7 views
8

मुझे हमारी वेबसाइट में कार्यों/घटनाओं के शेड्यूलिंग की पेशकश करने की आवश्यकता है। एक बकवास समानता कैलेंडर प्रणाली हो सकती है, जहां कोई व्यक्ति कैलेंडर आइटम जोड़ता है और जब दिनांक/समय 'हिट' होता है, तो कुछ तर्क (उदाहरण के लिए एक रिपोर्ट की गणना) निकाल दी जाती है।मैं .NET में समय-आधारित/निर्धारित ईवेंट कैसे कर सकता हूं?

मेरे सैकड़ों और यहां तक ​​कि हजारों अनुसूचित कार्यक्रम भी हो सकते हैं जो मेरे ग्राहकों द्वारा दर्ज की जाती हैं। जब कोई ग्राहक निर्धारित होने के लिए कुछ प्रविष्ट करता है, तो मैं उस जानकारी को डेटाबेस में सहेज लेगा। तो मैं अनुमान लगा रहा हूं कि मैं कहीं भी एक ईवेंट/नौकरी जोड़ूंगा, जिसमें डेटाबेस तालिका प्राथमिक कुंजी होगी। जब घटना को निकाल दिया जाना है, तो मैं उस जानकारी को डीबी से पकड़ूंगा, फिर तर्क करें। किया हुआ।

इसे संभालने के लिए कुछ सामान्य समाधान क्या हैं?

मैं .NET 3.5 SP1 का उपयोग कर रहा हूं। डीबी एसक्यूएल सर्वर 2008 है। यूआई हालांकि वेबबेस किया जाएगा।

मुझे यकीन नहीं था कि लोग एमएसएमक्यू का उपयोग करते हैं या नहीं? या एसक्यूएल सर्वर में बनाया कुछ? या एनटी सेवा के साथ कुछ ओपन सोर्स लाइब्रेरी (उदाहरण के लिए Quartz.NET)। सर्वर विंडोज 2008 मानक संस्करण होगा।

इसके अलावा - नहीं सुझाव एक क्रॉन जॉब बराबर या किसी आदेश पंक्ति स्क्रिप्ट, आदि

अंत का उपयोग करें, और यह एक माध्यमिक उद्देश्य है .. मैं इस Shiz के लिए नीला पर ऊपर फेंक में खुशी होगी और giggles ... तो भी संभव है? यह केवल एक इच्छा सूची विचार है। Azure का उपयोग करने से, समाधान आसान है, तो मैं इसे एक समर्पित बॉक्स पर करना पसंद करूंगा।

चियर्स :)

संपादित करें: तर्क, एक घटना निकाल दिया जाना आवश्यक है जब की प्रक्रिया पृष्ठभूमि नौकरियां हैं करने के लिए। कोई यूआई आवश्यक नहीं है।

+0

@ शुद्ध: संबंधित http://stackoverflow.com/questions/542804/asp-netbest-way-to-run-scheduled-tasks –

+0

किस समय ग्रैन्युलरिटी वे ईवेंट शेड्यूल कर सकते हैं (दूसरा, मिनट, 15 मिनट, 30 मिनट, घंटे, आदि)? हम यहां कितने उपयोगकर्ता बात कर रहे हैं? –

+0

समय ग्रॅन्युलरिटी है: वर्ष/माह/दिन/घंटा/मिनट। –

उत्तर

2

क्वार्ट्ज.NET शायद इन आवश्यकताओं को भी अच्छी तरह से संभाल सकता है। मेरे द्वारा देखे जाने वाले लाभ शेड्यूलर (क्रोन ट्रिगर + कैलेंडर्स) को सेट करने और टेस्टेबल कोड (नौकरियों) की छोटी इकाइयों में अपनी नौकरी रखने की क्षमता के विभिन्न तरीकों से हैं।

क्वार्ट्ज.NET आपको क्लस्टरिंग सुविधाओं के साथ आवश्यक वितरण और विफलता भी प्रदान करता है। एक अच्छी सुविधा प्रति-ट्रिगर कॉन्फ़िगर करने योग्य मिस्फीयर हैंडलिंग सेटअप भी है जो आपको मिस्फायर्स और शेड्यूलर डाउन-टाइम पर प्रतिक्रिया करने का मौका देती है।

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

बस मेरी पक्षपातपूर्ण $ 0.02।

0

यह सिस्टम की प्रकृति पर थोड़ा सा निर्भर करता है। धारणा है कि घटनाओं की पूरी परिभाषा डेटाबेस में संग्रहीत किया जाता है से कार्य करना:

  • घटना एक वेब UI में कुछ पैदा करने के लिए, अद्यतन पर प्रविष्टियों है कि 'क्या हुआ' के लिए तालिका की जाँच करें और जोड़ने की जरूरत है अगले वेब अनुरोध आउटपुट के लिए उचित दृश्य संकेतक/स्क्रीन/पॉपअप।
  • यदि आपकी घटनाएं पृष्ठभूमि प्रसंस्करण से संबंधित हैं, तो सबसे आसान समाधान एक अलग स्टैंड-साथ लिखना है .NET अनुप्रयोग जो नए रिकॉर्ड के लिए डेटाबेस इवेंट टेबल को पोस्ट करता है, और यह देखने के लिए घड़ी के विरुद्ध जांच करता है कि कौन सी घटनाएं हुई हैं। यदि आप कुछ घटनाओं में लंबी चल रही प्रक्रियाओं का कारण बनते हैं, तो आप फैंसी जा सकते हैं और थ्रेडिंग शामिल कर सकते हैं, लेकिन यह मूल डिजाइन होगा। (आप के लिए ... एक सरल एकल पिरोया अनुप्रयोग है कि चुनाव तालिका सबसे मजबूत होगा अगर केवल सूत्रण का उपयोग करें)
1

एक विकल्प जो भी सबसे व्यापक अंतराल आप पर चलाने के लिए किसी SQL काम बनाने जा सकता है तब और अपने सभी घटनाओं को संसाधित कर रहा है।

यदि आप .NET और SQL सर्वर दोनों दुनिया में सर्वश्रेष्ठ चाहते हैं तो आप use SQL jobs and call managed code भी कर सकते हैं। मुझे इस समाधान के साथ कोई अनुभव नहीं है, इसलिए अगर मैंने जो संसाधन प्रदान किया है, तो मैं बहुत आगे माफी माँगता हूं।

यदि कार्य बहुत जटिल हैं और आप SQL सर्वर पर असेंबली लोड नहीं करना चाहते हैं या आप बस अपने शेड्यूलिंग सिस्टम को पसंद नहीं करते हैं तो मैं एक तृतीय पक्ष शेड्यूलर प्लगइन के साथ एक .NET विंडोज सेवा की अनुशंसा करता हूं। व्यक्तिगत रूप से यदि सभी कोड संग्रहीत प्रक्रिया या संग्रहीत प्रक्रियाओं की एक श्रृंखला में रखा जा सकता है, तो मैं नौकरी करूँगा क्योंकि मुझे लगता है कि इसे प्रबंधित करना बहुत आसान है और आपके लिए बहुत से काम पहले से ही किए जा चुके हैं।

संपादित

मैं सिर्फ एक टिप्पणी है कि विवरण के स्तर को समझाया देखा। यदि आपके पास कुछ मिनट हैं जो हर मिनट करने की आवश्यकता है तो एक .NET सेवा समाधान शायद आसान होगा क्योंकि आपको शायद कुछ प्रकार के बहु-थ्रेडेड समाधान को लागू करना होगा।

0

तो मुझे लगता है कि मैं कहीं भी एक ईवेंट/नौकरी जोड़ूंगा, जिसमें डेटाबेस तालिका प्राथमिक कुंजी होगी। जब घटना को निकाल दिया जाना है, तो मैं उस जानकारी को डीबी से पकड़ूंगा, फिर तर्क करें।

मुझे नहीं पता कि आम समाधान क्या है, लेकिन पहिया को फिर से शुरू करने के बाद, मैं घटना समय पर डेटाबेस क्लस्टर्ड इंडेक्स बनाने के बारे में सोचता हूं, इसलिए मैं हर मिनट डेटाबेस को एक बयान के साथ मतदान कर सकता हूं। ..

SELECT * FROM Events WHERE Events.Time < next_minute 
1

आप एक काम अनुसूचक और एक नौकरी प्रबंधक की जरूरत है क्योंकि आप छोटे विवरण के स्तर को है जा रहे हैं और आप एक प्रायोरी सभी नौकरियों है कि किसी भी मिनट पर होने से खत्म हो जाएगा कि क्या पता करने की क्षमता के लिए है अगले मिनट

यह शेड्यूलर का काम आसान बनाता है। आपके पास एक डीबी टेबल होनी चाहिए जो आपकी नौकरियों को स्टोर करे और प्रत्येक मिनट में नौकरी शेड्यूलर सेवा उस तालिका में जाए और उन नौकरियों का चयन करें जिन्हें करने की आवश्यकता है।

यह नौकरी प्रबंधक के साथ उन नौकरियों को लागू करेगा। आप अपनी नौकरी को लागू करने के लिए एक और टेबल या एक लेनदेन कतार का उपयोग कर सकते हैं। आपकी नौकरी प्रबंधक सेवा नौकरी कतार की निगरानी करेगी। नौकरी कतार की निगरानी करने के लिए आप अपना खुद का रोल कर सकते हैं या BizTalk का उपयोग कर सकते हैं और ऑर्केस्ट्रेशन या workflow लात मार सकते हैं। यह कार्य को कतार से एक-एक करके खींच देगा, कार्यों को पूरा करेगा और डीबी में नौकरी की स्थिति अपडेट करेगा।

आपकी समस्या उपयोगकर्ताओं की संख्या, उनके द्वारा किए गए कार्यों की संख्या और कितनी गहन (समय, स्मृति, सीपीयू, आदि) के आधार पर स्केलेबिलिटी होगी। प्रत्येक कार्य को होने की अनुमति है। अगर मैं तुम थे, तो मैं 1 मिनट के समय ग्रैन्युलरिटी पर वापस धक्का दूंगा और इसे 5 मिनट तक दबा दूंगा। आपको 1:38 पीएम पर क्या करने की ज़रूरत है कि आप 1:40 बजे तक इंतजार नहीं कर सकते के लिये? :)

1

यह पहले से ही स्टैक ओवरफ्लो पर एक चर्चा की गई समस्या है। कृपया अपने प्रश्न में जानकारी का सबसे जरूरी हिस्सा जोड़ना माध्यम Need job scheduler in asp.net

आप भूल जाना - ASP.Net

यह जो एक सेवा की तरह चलाने के लिए और आप एक दे सकते हैं ASp.Net वेब ऐप्लिकेशन के लिए एक अनुसूचक ढांचे का वर्णन करता है विधि जिसे आवधिक रूप से बुलाया जाता है और फिर आप घटनाओं को लोड करने के लिए अपने तर्क को आग लगा सकते हैं, टाइमर का उपयोग कर वैध कतार निर्धारित कर सकते हैं।

इसके अलावा, यह सभी विकल्पों में से सबसे सस्ता है। आशा है कि आपको यही चाहिए।

+0

नहीं - मुझे _ASP.NET_ में नौकरी शेड्यूलर की आवश्यकता नहीं है। साथ ही, मैंने उस stackoverflow _blog_ पोस्ट को पढ़ा है जो उन सभी एसओ पोस्टों को आगे बढ़ाता है। टिप्पणियां पढ़ें -> एंटरप्राइज़ ऐप्स के लिए यह एक अच्छा समाधान नहीं है। एक छोटा ऐप, यकीन है। तो नहीं, कोई नहीं कर सकता, दोस्त। –

+0

यदि आप एक मानक एंटरप्राइज़ समाधान की तलाश में हैं, तो समर्पित वेब सर्वर के लिए जाएं और आपके पास कुछ संभावित समाधान हो सकते हैं जैसे शेड्यूलर या SQL सर्वर होस्ट किए गए .NET रीमोटिंग सेवा। नेट शेड्यूलर इत्यादि – MSIL

4

Workflow Foundation ऐसा कर सकते हैं। Delay activity का उपयोग करें, टाइमस्पेन को सेट करें (DesiredTimeOfExecution - Now)। बड़े पैमाने पर सिस्टम के लिए, UnloadOnIdle को सत्य पर सेट करें, और लंबित वर्कफ़्लो आवश्यक होने तक जारी रहेगा।

यहां a very simple example of the Delay Activity है।

डब्ल्यूएफ नि: शुल्क, .NET Framework 3.0 के हिस्से के रूप में शामिल है।

+1

और 100% पुन: प्राप्त और पुनः लिखा गया (असंगत रूप से) 4.0 – dkretz

+0

में स्क्रैच से @le dorfier: er .. आपने बस क्या कहा? उस टिप्पणी का कोई मतलब नहीं है ??? :( –

+0

@ चेसियो: डब्ल्यूएफ के साथ, यह कई बार और कई गतिविधियों को संभाल सकता है, जैसे हजारों और हजारों की तरह? दूसरा, वेब सर्वर रीसायकल/रीबूट होने पर क्या होता है? तीसरा, क्या इसका उपयोग वेब- खेत परिदृश्य? –

2

आप जो चाहते हैं वह SQL सर्वर सेवा ब्रोकर है।

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

डीबी में एसएसबी कतार पर अपनी घटना जानकारी रखने के लिए आप एक संग्रहीत प्रक्रिया को हिट करेंगे। आप उस संदेश को भविष्य में एक समय और जागृत करने की प्रक्रिया को संसाधित करने के लिए एक समय देंगे जो आपके ईवेंट डेटा को पकड़ लेता है और एक पिकअप कतार में डालता है जो "बाहरी सक्रियण" करता है। ईए एक विंडोज सेवा के लिए अधिसूचना भेजता है जो एक कंसोल ऐप को इंगित करता है। वह कंसोल ऐप पिकअप कतार से घटना की जानकारी पकड़ लेता है। अब आपके पास सटीक समय पर आपका इवेंट डेटा है जो आप चाहते हैं। हालांकि इसे कंसोल ऐप में पसंद करें।

एक सीखने की वक्र है लेकिन यदि आपको एसक्यूएल सर्विस ब्रोकर की विश्वसनीयता, लचीलापन और स्केलेबिलिटी की आवश्यकता है तो यह इसके लायक है। शुरू करने के लिए नीचे कुछ लिंक दिए गए हैं। SQL Service Broker vs. MSMQ

अतः केवल मुझे एक लिंक दुर्भाग्य से पोस्ट करने के लिए अनुमति होगी:

यहाँ तुलना दी गई है। अन्यथा मैं आपको एसएसबी के साथ शुरू करने में मदद के लिए अधिक संसाधनों के बारे में बता सकता हूं।

आशा है कि इससे मदद मिलती है!

+0

अभी तक ..मैं इस सेवा दलाल सामान की कोशिश करने और देखने जा रहा हूं। बहुत प्रमोशन लगता है। कोई और लिंक बहुत अच्छा होगा! शायद कुछ टिप्पणियों में, यहाँ? –

+0

यहां नट्स और बोल्ट का एक बड़ा स्रोत है http://rusanu.com/articles/ यह पुस्तक भी प्राप्त करें: http: //bit.ly/SAm9m यहां एक तुलना है: एसक्यूएल सेवा ब्रोकर बनाम एमएसएमक्यू –

+0

अंतिम लिंक भूल गए : http://www.devx.com/dbzone/Article/34110 –

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