.NET

2010-03-11 5 views
9

में लंबे समय तक चलने वाली सेवापूर्ण सेवा मुझे .NET में एक सेवा बनाने की आवश्यकता है जो आंतरिक (आंतरिक) स्थिति को बनाए रखता है, कई धागे पैदा करता है और आम तौर पर लंबे समय तक चल रहा है।.NET

  • अच्छा पुराने Windows सेवा
  • विंडोज संचार सेवाएं
  • विंडोज कार्यप्रवाह फाउंडेशन

मैं वास्तव में जो चयन करने के लिए पता नहीं है - वहाँ एक बहुत विकल्प हैं। अधिकांश कार्यक्षमता इस सेवा द्वारा उपयोग की जाने वाली लाइब्रेरी में है, इसलिए सेवा स्वयं ही सरल है।

एक तरफ, यह महत्वपूर्ण है कि सेवा होस्ट संभवतः "बस काम करने" के करीब है, जिसमें विंडोज सेवा शामिल नहीं है। दूसरी तरफ, यह महत्वपूर्ण है कि मेजबान द्वारा सेवा नहीं ली जाती है क्योंकि कोई बाहरी गतिविधि नहीं है, जो डब्ल्यूसीएफ को डरावनी बनाती है। डब्ल्यूएफ के लिए, यह सबसे मजबूत बिक्री बिंदु है, प्रक्रियाओं को बनाने की क्षमता है, उम ..., वर्कफ़्लोज़, जो कुछ मुझे चाहिए और न ही चाहिए।

इसे समेकित करने के लिए, माइक्रोसॉफ्ट प्रौद्योगिकियों की अधिकता ने मुझे थोड़ा उलझन में डाल दिया।

मैं पेशेवरों और प्रत्येक समाधान के विपक्ष .NET में स्टेटफुल, लंबी चलने वाली सेवा की समस्या के लिए (या अन्य की मैं उल्लेख करने में विफल कर दिया है)

धन्यवाद के बारे में सहायता की सराहना करते हैं,

01: आसफ

पुनश्च,
मैं नेट 4.

संपादित उपयोग कर रहा हूँ

  • मेजबान द्वारा "बस काम करने" का मेरा मतलब है, उदाहरण के लिए, अगर मैं क्रैश करता हूं तो सेवा जो मैं बनाता हूं उसे पुनः सक्रिय किया जाता है।
  • मुझे लगता है कि इस सवाल का कारण यह है कि मैंने अतीत में विंडोज सेवाएं बनाई हैं (मुझे लगता है कि यह Win32 एपीआई के साथ सादे सी ++ में था), और अगर ऐसा कुछ है तो मैं कुछ आसान नहीं छोड़ना चाहता चीज के रूप में

इस प्रकार सभी उत्तरों के लिए धन्यवाद!
असफ़।

संपादित करें 2:

मैं एक Windows सेवा का उपयोग करेंगे, और इसके अंदर एक WCF सेवा की मेजबानी कर सकते हैं अन्य प्रक्रियाओं यह साथ संवाद करने की अनुमति देने के लिए।

धन्यवाद,
आसफ

+0

यह एक अच्छा सवाल है, +1 और पसंदीदा –

+1

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

उत्तर

7

अपने विवरण के आधार पर, आपका सर्वश्रेष्ठ दांव # 1, एक गुड ओल्ड Windows सेवा है। आप इसे काम सौंप सकते हैं, जब तक आप चाहें तब तक चल सकते हैं, और यह धागे को बढ़ा सकता है। सुनिश्चित नहीं है कि "बस काम कर रहे" या आप विंडोज सेवा को चलने से क्यों रोकते हैं।

आप वैकल्पिक रूप से एक सरल कंसोल ऐप बना सकते हैं, लेकिन आपको प्रबंधन (पुनरारंभ, इत्यादि) को स्वयं संभालना होगा।

डब्ल्यूसीएफ अनिवार्य रूप से है।वेब पर नेट रीमोटिंग, यह लंबे समय से चलने वाली प्रक्रियाओं को स्वयं ही संभाल नहीं पाता है। वर्कफ़्लो फाउंडेशन लंबे समय से चलने वाले कार्यप्रवाह को संभाल सकता है, लेकिन केवल यही।

0
  1. के रूप में संभव के रूप में "बस काम कर रहा" - जो Windows सेवा शामिल नहीं है ...
  2. नहीं निष्क्रियता के कारण निकाल दिया ... डरावना - WCF ...
  3. एक कार्यप्रवाह की कोई जरूरत नहीं, और न ही चाहते हैं यह - वर्कफ़्लो फाउंडेशन ...

ऐसा लगता है कि आप जितना विकल्प मानना ​​चाहते हैं उतना विकल्प नहीं है! ; पी

  • नौकरी करने वाले एक साधारण EXE के बारे में क्या है, और यह विंडोज टास्क शेड्यूलर के माध्यम से निर्धारित है? आप अपने ऐप के अंदर से मल्टीथ्रेडिंग का प्रबंधन करते हैं। यह एक कंसोल अनुप्रयोग के रूप में सरल होगा।

संपादित मेरी पहली पसंद Windows सेवा के रूप में अच्छी तरह से हो सकता है, लेकिन यह अनुसूचक के माध्यम से सरल है।

3

अपनी आवश्यकताओं के अनुसार, "(भीतरी) राज्य में स्मृति, एक से अधिक थ्रेड spawns और आम तौर पर है लंबे समय से चल" वहाँ वास्तव में दो विकल्प हैं:

  1. कंसोल आवेदन
  2. Windows सेवा

अन्य दो का उल्लेख इनके व्युत्पन्न हैं। पहला व्यक्ति बहुत प्राचीन है और चलिए इसके बारे में भूल जाते हैं। लेकिन डीबग की आसानी के लिए मैं Main में Environment.UserInteractive की जांच करता हूं और यदि कंसोल ऐप के रूप में सत्य चलाता है, तो सेवा के रूप में। तो आपकी पसंद 2 होना चाहिए।

डब्ल्यूसीएफ संचार ढांचा है और इसमें लंबी चल रही सेवा के बारे में कुछ भी नहीं है। आईआईएस डब्ल्यूसीएफ ऐप्स होस्ट कर सकता है, लेकिन वहां कोई बहुप्रचार और इनमेमरी डेटा नहीं है, यह वेब सेवा के रूप में एकल कॉल है। डब्ल्यूएफ वर्कफ़्लो फ्रेमवर्क है और फिर सेवाओं के बारे में कुछ भी नहीं है। यह जटिल प्रवाह तर्क को लागू करने में मदद कर सकता है।

विंडोज सेवा में डब्ल्यूसीएफ और डब्ल्यूएफ दोनों का उपयोग किया जा सकता है।

2

चूंकि आपको किसी वर्कफ़्लो-संबंधी विशेषताओं की आवश्यकता नहीं लगती है, इसलिए मेरा वोट डब्ल्यूसीएफ में टिकाऊ सेवाओं तक जाता है। यह .NET 3.5 में नया है, और यह डब्ल्यूसीएफ सर्विसेज को अपने राज्य को प्रदाता-आधारित "दृढ़ता स्टोर" में रखने की अनुमति देता है, आमतौर पर एक SQL सर्वर बैकएंड डेटाबेस (लेकिन एक फाइल सिस्टम-आधारित प्रदाता भी है, और यह एक्स्टेंसिबल है - आप लिख सकते हैं यदि आवश्यकता हो तो अपनी खुद की)।

इस विषय पर कुछ उत्कृष्ट ब्लॉग पोस्ट की जाँच करें:

डब्ल्यूसीएफ एक महान और शक्तिशाली संचार लाइब्रेरी है जो आपको बहुत सारी परेशानी और विवरण से मुक्त करती है जो आपको स्क्रैच से सब कुछ बनाते समय सौदा करना होगा।

डब्ल्यूसीएफ आईआईएस (इसकी सभी कमियों के साथ) में होस्ट किया जा सकता है, या आप अपनी डब्ल्यूसीएफ सेवा को विंडोज एनटी सेवा में चिपका सकते हैं और मशीन बूट होने पर इसे शुरू और चला सकते हैं, बिना किसी लॉग ऑन किए।

+0

आपका पहला लिंक कहता है कि "डब्ल्यूसीएफ टिकाऊ सेवाएं डब्ल्यूसीएफ सेवाएं हैं जिनमें संचालन निजी चर के मूल्यों को याद रख सकता है (= सेवा की स्थिति) serivcehost और/या क्लाइंट के पुनरारंभ के बीच।", जो दिलचस्प है, लेकिन नहीं क्या चाहिए मुझे। मैंने कुछ नया सीख लिया। धन्यवाद! –

0

शायद Quartz.Net देखें? यह शेड्यूलर का अधिक है लेकिन आप कई धागे पर नौकरियां आदि शुरू कर सकते हैं। मैंने बड़ी सफलता के साथ विंडोज सेवा के बजाय इसका इस्तेमाल किया।

1

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

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

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