2011-12-06 8 views
8

मैं एक .NET 4 अनुप्रयोग विकसित कर रहा हूं जिसके लिए बैकएंड वर्कर थ्रेड चलाना आवश्यक है। इस धागे में निम्नलिखित कोड शामिल हैं:एएसपी.नेट में लंबी चल रही पृष्ठभूमि प्रक्रिया - एप्लिकेशन_स्टार्ट या अलग प्रक्रिया?

while (true) { 
    //Check stuff in database 
    //Do stuff 
    //write to database/filesystem 
    Thread.sleep(60000) 
} 

एएसपी.नेट ऐप डेटाबेस के लिए सिर्फ एक अग्रभाग है।

मेरा प्रश्न यह है कि इस कार्यकर्ता लूप को रखने के लिए सबसे अच्छी जगह होगी। ऐसा लगता है कि मेरे तत्काल दो विकल्प Application_Start विधि से इसे स्पिन करने के लिए होंगे, और बस इसे चलाने दें, या (2) इसे एक अलग प्रक्रिया (विंडोज सेवा?) में बंडल करें

(1) स्पष्ट रूप से होगा एएसपी.NET कोड में कुछ तर्क की आवश्यकता है ताकि यह जांच सके कि यह अभी भी चल रहा है, क्योंकि आईआईएस इसे मार सकता है। यह भी काफी साफ है कि पूरे एप्लिकेशन तर्क एक, आसानी से तैनाती योग्य पैकेज में है। (2) अधिक अलग है, लेकिन बहुत गड़बड़ महसूस करता है।

सबसे अच्छा तरीका क्या है?

+0

[एएसपी.नेट और लंबे समय तक चलने वाले पृष्ठभूमि धागे के संभावित डुप्लिकेट - वे कैसे मिश्रण करते हैं?] (Http://stackoverflow.com/questions/323693/asp-net-and-long-running-background-threads-how -do-they-mix) – jrummell

उत्तर

13

यदि संभव हो तो मैं दृढ़ता से विंडोज सेवा का चयन करूंगा। ASP.NET comes with a lot of baggage में पृष्ठभूमि थ्रेडिंग।

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

और बहुत कुछ।

+0

"बैगेज" को आपके लिए [हैंगफायर] (http://hangfire.io/) जैसे टूल के साथ ख्याल रखा गया है - पृष्ठभूमि प्रसंस्करण अब बहुत मजबूत है। [इन बिंदुओं पर विचार करें] (http://stackoverflow.com/a/41734936/56145)। –