2008-09-05 13 views
7

पर रखरखाव प्रक्रिया को हटाने के लिए सबसे अच्छा अभ्यास क्या है एएसपी.नेट आवेदन को देखते हुए, मुझे नियमित आधार पर रखरखाव प्रक्रिया चलाने की आवश्यकता है (दैनिक, प्रति घंटा, आदि)।एएसपी.नेट

सर्वर पर निर्धारित समय की तरह बाहरी प्रक्रिया पर भरोसा किए बिना इसे पूरा करने का सबसे अच्छा तरीका क्या है (मान लें कि मेरे पास सर्वर तक पहुंच नहीं है - साझा होस्टिंग वातावरण)।

+0

यह प्रश्न स्टैक ओवरफ़्लो के लिए ऑफ-विषय है क्योंकि यह सर्वोत्तम अभ्यास की तलाश में है, जो राय वाले उत्तरों को आकर्षित करता है। – cybermonkey

उत्तर

11

यहाँ जिस तरह से StackOverflow करता है कि यह:

private static CacheItemRemovedCallback OnCacheRemove = null; 

protected void Application_Start(object sender, EventArgs e) 
{ 
    AddTask("DoStuff", 60); 
} 

private void AddTask(string name, int seconds) 
{ 
    OnCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved); 
    HttpRuntime.Cache.Insert(name, seconds, null, 
     DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration, 
     CacheItemPriority.NotRemovable, OnCacheRemove); 
} 

public void CacheItemRemoved(string k, object v, CacheItemRemovedReason r) 
{ 
    // do stuff here if it matches our taskname, like WebRequest 
    // re-add our task so it recurs 
    AddTask(k, Convert.ToInt32(v)); 
} 

विवरण: http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

+1

जेफ एटवुड कहते हैं: 12 फरवरी, 200 9 को 6:50 बजे नहीं, हमने एक समर्पित कार्य में बदल दिया है। हम निश्चित रूप से इस तकनीक से बाहर निकला। मुझे लगता है कि यह छोटी साइटों के लिए ठीक है हालांकि! –

2

ऐसा करने का एक तरीका, यदि आपको इसे निर्धारित समय पर करने की आवश्यकता नहीं है, लेकिन केवल "थोड़ी देर में" साफ करने की आवश्यकता है, तो अपने ग्लोबल.एक्सएक्स सत्र_ऑनएंड() में एक फ़ंक्शन बनाना है 1 और 100 के बीच यादृच्छिक संख्या बनाएगा, और यदि संख्या कहती है, 50, तो आप रखरखाव कार्य निष्पादित करते हैं।

ऑफकोर्स आप कार्य को अधिक बार होने के लिए "100" को कम कर सकते हैं।

http://www.codeproject.com/aspnet/ASPNETService.asp पर अनुसूचित नौकरियों को चलाने के लिए एएसपी.NET का उपयोग करके एक विंडोज सेवा सिमुलेट शीर्षक और लेख है जो एक टाइमर अनुकरण करने के लिए एक समाप्ति कैश का उपयोग करता है। यह दावा करता है कि इसे किसी भी होस्टेड साइट पर चलाया जा सकता है।

आपने पिछले एक प्रयोग कर रहे हैं, तो कृपया इस तकनीक के बारे में एक पोस्ट से इस टिप्पणी को पढ़ें:

आप वास्तव में काम चल रहा है की लंबाई पर सावधान रहने की जरूरत है। प्रत्येक नया कार्य एक नया वर्कर थ्रेड है और उनमें से सीमित संख्या है - यह प्रबंधित थ्रेड पूल से एक थ्रेड "borrows" है।

फ्रेमवर्क के v3.5 में शुरू धागे की अधिकतम संख्या 25 से बढ़ाकर 10x 250 लेकिन वहाँ अब करने के लिए उन्हें एक लघुगणकीय स्टार्टअप है, ताकि यह अधिक धागे यह साथ stingier हो जाता है बाहर खैरात था उन्हें। यदि आप प्रबंधित थ्रेड पूल में उपलब्ध थ्रेड्स सेचलाते हैं - आपकी प्रतिक्रिया बार छत के माध्यम से जाने जा रही हैं।

जो आप वास्तव में यहां लिख रहे हैं वह मैसेजिंग/क्यूइंग सिस्टम है।

यदि आप कैश को अपडेट करने जैसी चीजें कर रहे हैं, तो हर तरह से - को एक नए कार्य से बाहर लाएं। आप कुछ एक माध्यमिक HTTP संसाधन या गहन डेटाबेस काम किसी तरह का डाउनलोड करने की तरह कर रहे हैं - एक Windows सेवा लिख ​​सकते हैं और एक पंक्ति का उपयोग करें कि आप कितना आप हर बार बंद "काटने" पर अधिक नियंत्रण की अनुमति देता है।

0

इस एक बाहरी प्रक्रिया है और मैं कैसे विश्वसनीय नहीं जानता लेकिन आप एक मशीन पर कुछ इसी तरह सेट कर सकते हैं जो आप जानते हैं वह हमेशा www.webcron.org पर है।

असल में यह जो करता है वह उस पृष्ठ को हिट करता है जिसे आप अनुरोध करते समय उस अनुरोध पर करते हैं।

आप अनिवार्य रूप से किसी नियमित शेड्यूल पर किसी पृष्ठ को हिट कर सकते हैं जो आपके रखरखाव कार्य को बंद कर देगा।

जेफ और जोएल ने हाल के पॉडकास्ट में अन्य तरीकों के माध्यम से इसी तरह की चीजों को करने पर भी चर्चा की।

1

जिस तरह से स्टैक ओवरव्लो यह निश्चित रूप से अनूठा है, आप इस question पर भी नजर रख सकते हैं, क्योंकि यह संबंधित है।

2

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