विंडोज सेवाओं के व्यावहारिक उपयोग क्या हैं? [बन्द है]


18

मैं विंडोज सर्विसेज के साथ काम करने के लिए नया हूं। हालाँकि मैंने VS2010 में विंडोज़ सेवाएँ बनाना सीख लिया है। मैं कुछ व्यावहारिक तरीके जानना चाहूँगा जिनमें विंडोज़ सेवाओं का उपयोग किया जा सकता है?

मैंने वर्तमान संदर्भ के साथ Googling को केवल Windows सेवा बनाने के तरीके के बारे में अधिक ट्यूटोरियल खोजने की कोशिश की।

इनाम प्रस्ताव पर संपादित करें:

सभी उत्तर महान हैं लेकिन मैं विंडोज़ सेवाओं और उनके निहितार्थ पर अधिक व्यावहारिक उदाहरणों की तलाश कर रहा था ? यह डेवलपर्स को यह जानने में मदद करेगा कि केस स्टडी के साथ उनका उपयोग कब उचित है।


28
व्यावहारिक उदाहरण? अभी आपके विंडोज बॉक्स पर चलने वाली हर सेवा के बारे में क्या है?
यानिस

3
या आपके * निक्स बॉक्स
jk

1
मुझे प्रसारण रेडियो से शास्त्रीय संगीत रिकॉर्ड करना पसंद है। एक कार्यक्रम के साथ, मुझे 2 बजे उठना होगा और "रिकॉर्ड" बटन दबाना होगा। एक सेवा के साथ, मैं अग्रिम कार्रवाई कर सकता हूं और शांति से सो सकता हूं। कार्यक्रम टीवी हैं - सेवाएं वीसीआर हैं।
किलियन फोथ

जवाबों:


42

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

कुछ चीजें जो कभी सेवाओं के रूप में लिखी जाती थीं (2am पर बैकअप फाइलें, 3am आदि पर अनुस्मारक ईमेल भेजना) शायद आज निर्धारित कार्यों के रूप में बेहतर तरीके से किया जाता है, जिसमें विंडोज 7 और ऊपर का जबरदस्त लचीलापन है, लेकिन अगर डेवलपर ने उन्हें कभी नहीं सीखा, या सिस्टम को XP का समर्थन करना चाहिए, आपको उन प्रकार के कार्यों को करने वाली सेवाएं भी मिलेंगी।


1
+1। बहुत बढ़िया जवाब। आप मुझे याद दिलाते हैं कि मैंने डेटाबेस बैकअप लेते समय कैसे हल किया। पहले बैकअप लेने के लिए हम सर्वर में एक SQL प्रक्रिया को शेड्यूलर के माध्यम से चलाते थे जिसे exe कहते हैं। निर्वासन पॉप अप करने के लिए उपयोग किया जाता है और फिर एक बार किया जाता है अपने आप बंद हो जाता है। मुझे लगता है कि यहां विंडोज़ सेवा एक बेहतर विकल्प था।
कार्तिक श्रीनिवासन

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

2
मैं NTver <6.0 पर भी बहुत सारे निर्धारित कार्य चला रहा था। । ।
व्याट बार्नेट

1
@Polynomial: अनुसूचित कार्य किसी भी खाते में, कम से कम NT5 + के लिए चला सकते हैं। अनअटेंडेड रनिंग के लिए कुछ भी करने की आवश्यकता है ताकि आप यह पता लगा सकें कि यह विफल क्यों हुआ।
व्यट बार्नेट

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

9

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

वे विंडोज पर (सबसे व्यावहारिक तरीकों से) डेमोंस पर * निक्स हैं।


5

सेवा

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

मैं कुछ व्यावहारिक तरीके जानना चाहूंगा जिसमें विंडोज़ सेवाओं का उपयोग किया जा सके?

सर्विस डिफिकेशन के अनुसार, विंडो सर्विस और अन्य प्रकार की सेवाएं बहुत सारी कार्यक्षमता करती हैं। इस संदर्भ में खोज इंजन आपके मित्र हैं

Windows सेवाओं का उपयोग आम तौर पर तब किया जाता है जब किसी एप्लिकेशन को लगातार चलाने की आवश्यकता होती है। आपको उपयोगकर्ता सहभागिता के बिना, पृष्ठभूमि में कोड चलाने के लिए एक विंडोज सेवा का निर्माण करना चाहिए

यदि कोई लॉग ऑन नहीं है, तो भी Windows सेवा चलेगी। मशीन के संचालित होते ही विंडोज सेवा चालू हो सकती है , जो सर्वर के रूप में चलने के लिए आदर्श है, उदाहरण के लिए http सर्वर। किसी को लॉगिन करने की आवश्यकता नहीं है।

उदाहरण के लिए यदि उन्हें निम्न की आवश्यकता हो:

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

मैं निम्नलिखित कारणों से एक सेवा का उपयोग करूंगा:

  • आपको सत्र चलाने की आवश्यकता नहीं है। यह सुरक्षा के लिए अच्छा है, और सर्वर पर ओवरहेड को भी कम करता है।
  • आपको फ्री
    ओ स्टार्ट
    ओ स्टॉप
    ओ पॉज
    ओ कंटिन्यू के लिए निर्मित कुछ प्रबंधन कमांड मिलते हैं

  • आप सर्वर इवेंट जैसे शटडाउन को संभाल सकते हैं।

इन सेवाओं के बारे में अतिरिक्त जानकारी के साथ लिंक:

Asp.net पर - // TODONT: एक अनुसूचित प्रक्रिया को चलाने
के लिए Windows सेवा का उपयोग करें। WIndows सेवा का उपयोग क्या है


एक विंडोज़ सेवा के उच्चतम विशेषाधिकार के साथ कैसे चलाएं? उदाहरण के लिए शेड्यूल किए गए कार्य संभव हैं stackoverflow.com/a/11561410/206730IMHO, कम से कम सीखने की अवस्था के लिए बेहतर नमूने पूर्ण स्रोत कोड और अच्छे पैटर्न के साथ वास्तविक अनुप्रयोग हैं
Kiquenet

4

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

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

मैंने आमतौर पर सेवाओं का उपयोग किया है जब मुझे फ़ोल्डर या ईमेल इनबॉक्स जैसी किसी चीज़ की निगरानी करनी होती है।


3

चूँकि आपने अपने प्रश्न के व्यावहारिक उदाहरणों के बारे में नोट जोड़ा है, इसलिए मैं आपको उद्यम अनुप्रयोगों के लिए लिखी गई सेवाओं के कुछ उदाहरण दूंगा (आप यह नहीं कहेंगे कि क्या आप एक उद्यम अनुप्रयोग प्रोग्रामर हैं लेकिन मेरा अनुमान है कि अधिकांश C # VS2010 प्रोग्रामर हैं) । मुझे लगता है कि आप इस बात का अंदाजा लगा रहे हैं कि जो डेवलपर माइक्रोसॉफ्ट के लिए काम नहीं करते हैं वे क्या लिख ​​सकते हैं।

एक दिल की धड़कन की निगरानी सेवा, जो यह जांचती है कि क्या अन्य कार्यक्रम अभी भी चल रहे हैं (यह एक निर्धारित कार्य के रूप में भी काम कर सकता है, लेकिन सेवा के रूप में लागू किया गया था)।

एक रिपोर्ट लेखन सेवा, जिसने रिपोर्ट अनुरोधों की कतारों के माध्यम से काम किया, रिपोर्ट्स को चलाया, और जो प्रिंटर व्यस्त था, उसके आधार पर उन्हें अलग-अलग प्रिंटरों को भेजा। इसने एक विरासत आवेदन से उचित मात्रा में काम करने में मदद की और रिपोर्ट को सेवा चलाने वाले कई सस्ते बक्से द्वारा साझा करने की अनुमति दी।

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

एक कि क्लाइंट / सर्वर अनुप्रयोग के सर्वर भाग भी एक सेवा के रूप में लागू किया गया था इतना है कि यह, आदि एक रिबूट पर पुन: प्रारंभ होगा एक .exe है कि एक ही कार्यक्रम भागा साथ एक अन्य परियोजना था नहीं एक सेवा के रूप में, यह करने के लिए आसान बनाने के लिए विकास मशीनों पर डिबग।

मुझे आशा है कि वह मदद करेंगे। अन्य उत्तर बेहतर सामान्य उत्तर हैं, हालांकि, विशेष रूप से यह विचार है कि अनुसूचित कार्यों को अब ज्यादातर उद्देश्यों के लिए लिखना और प्रशासित करना आसान है।


+1 यह बताने के लिए कि विंडोज़ सेवाओं का उपयोग कहाँ किया गया है। मेरे पास सॉकेट्स तक सीमित संपर्क है (क्लाइंट-सर्वर मॉडल पोर्ट के माध्यम से IPAddress के माध्यम से संचारित), लेकिन सामान्य रूप से पाइप का उपयोग नहीं किया है। क्या पाइपों में समान भूमिका होती है जैसे सॉकेट्स करते हैं?
कार्तिक श्रीनिवासन

2

एक सेवा के लिए कई व्यावहारिक उपयोग हैं। एक मुख्य व्यावहारिक उपयोग यूआई और सेवा (या यूनिक्स में डेमन) के बीच बातचीत है, जो इस मामले में, एक ग्राहक और सर्वर के बीच अंतर है। एक सर्वर अनुरोध प्राप्त करता है, अनुरोध संसाधित करता है, और आमतौर पर एक उत्तर भेजता है। दूसरे शब्दों में, यह एक अनुरोध उत्पन्न करता है। SQLSERVER, IIS, या टेलनेट के बारे में सोचें। एक क्लाइंट, आमतौर पर सर्वर को रिक्वेस्ट भेजकर सर्वर का इस्तेमाल करता है और फिर रिप्लाई को डिस्प्ले या प्रोसेस करता है। यानी एक डेटा एंट्री एप्लिकेशन, एक वेब एप्लिकेशन ... सर्वर लगभग हमेशा विंडोज़ (या यूनिक्स में एक डेमन) में एक सेवा के रूप में स्थापित किया जाता है और ग्राहक आमतौर पर एक सामान्य ऐप है। किसी सेवा के कई और जटिल उपयोग हैं, लेकिन यह वह है जिसे आप संभवतः सबसे अधिक उपयोग करेंगे।

उदाहरण के लिए: मैं वर्तमान में एक SIP / H323 वीडियो सर्वर पर काम कर रहा हूं। यह एसडीके का उपयोग करके एक आवेदन से अनुरोध प्राप्त करता है जो मैंने लिखा था, उन्हें संसाधित करता है, और वापस जवाब देता है। वीडियो सर्वर एप्लिकेशन को एक एम्बेड किए गए लिनक्स मशीन पर एक डेमॉन के रूप में स्थापित किया गया है (यह एक एम्बेड किए गए विंडोज मशीन पर एक सेवा होगी, लेकिन जो एम्बेड किए गए विंडोज के लिए विंडोज का उपयोग करता है) और एसडीके का उपयोग करने वाले किसी भी एप्लिकेशन को क्लाइंट माना जाएगा।

बेशक, आप ऐसे एप्लिकेशन लिख सकते हैं और उन्हें सेवा नहीं बना सकते। आप अभी भी उन्हें विंडोज शुरू करने पर शुरू कर सकते हैं और उन्हें पृष्ठभूमि में चला सकते हैं। हालाँकि, इसमें कई रजिस्ट्री प्रविष्टियाँ शामिल हैं और आपके कोड में कुछ फ़ाइनैग्लिंग - यह बहुत आसान है जैसे कि .NET एपीआई की तुलना में c एपीआई का उपयोग करना। दूसरी ओर, Microsoft ने सेवाओं को बनाकर इसे बहुत आसान बना दिया है और हमें उन्हें OS के साथ पंजीकृत करने की अनुमति देता है यह मैन्युअल रूप से करने की तुलना में बहुत सरल और आसान है।


+1 - बस स्पष्ट करने के लिए, सेवा को सर्वर में एक विंडोज़ सेवा के रूप में होस्ट किया जाता है और फिर क्लाइंट एसडीके एक पोर्ट के माध्यम से सर्वर को प्रतिक्रिया प्राप्त करने के लिए डेटा संचार करने के लिए जानकारी भेजता है। क्या मेरी समझ सही है?
कार्तिक श्रीनिवासन

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

@ कार्तिक, वैसे, यह टीसीपी / आईपी या पाइप होना जरूरी नहीं है। मैंने देखा है कि लोग इंटरप्रोसेस संचार करने के लिए स्लॉट्स के साथ संकेतों का उपयोग करते हैं। हालाँकि, डिज़ाइन पैटर्न समान है। आप प्रोजेक्ट के आर्किटेक्ट तक कैसे संवाद करते हैं।
जोनाथन हेंसन

मैं उदाहरण की बात कर रहा था।
कार्तिक श्रीनिवासन

2

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

  • सिस्टम जो संसाधनों / अन्य अनुप्रयोगों की निगरानी करते हैं और रिपोर्ट भेजते हैं (उपयोगकर्ता गतिविधि, विशेष रूप से फ़ाइल ट्रैफ़िक, एप्लिकेशन दुर्व्यवहार की सूचनाएं)

  • सिस्टम जो अन्य स्थानीय अनुप्रयोगों (अनुवाद, फ़ाइल रूपांतरण, इंटर-सिस्टम मैसेजिंग) को सेवाएं प्रदान करते हैं

  • एंटीवायरस सॉफ्टवेयर।

मुझे लगता है कि ये बड़े उदाहरण हैं जिन्हें आसानी से अनुसूचित कार्यों का उपयोग करके नहीं किया जा सकता है।


उदाहरणों के लिए +1। आप फ़ाइल यातायात पर संक्षिप्त कर सकते हैं?
कार्तिक श्रीनिवासन

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

2

सेवाओं का उपयोग करने के मेरे पसंदीदा उदाहरण:

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

डेटाबेस सर्वर के लिए +1। चीजें जगह-जगह गिर रही हैं। हम सभी डेटाबेस से जुड़ने के लिए SqlConnection या OledbConnection का उपयोग करते हैं जो वास्तव में उस सेवा द्वारा संसाधित होता है जो सर्वर में रहती है।
कार्तिक श्रीनिवासन

2

यहां वास्तविक कोड (नीचे से) के साथ सेवा अवधारणा का एक नमूना उपयोग है।

यह एक सेवा बस को कॉन्फ़िगर करने के लिए क्या करता है जो एक कतार से दूर होती है और वेब सर्वर और क्लाइंट GUI के संदेशों को सुनती है।

जब यह संदेशों को प्राप्त करता है तो यह डोमेन के तर्क को क्या तर्क देता है, यह घटनाओं को डिस्क पर सहेजता है और उन घटनाओं को संदेश ब्रोकर को प्रकाशित करता है।

अधिकांश बड़े अनुप्रयोग जो शिथिल रूप से युग्मित होते हैं वे किसी प्रकार के "कार्यकर्ता" आर्किटेक्चर को नीचे की चीज़ की तरह लागू करते हैं।

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

https://github.com/haf/Documently/blob/master/src/Documently.Domain.Service/Program.cs :

using System.Threading;
using Castle.MicroKernel.Registration;
using Castle.Windsor;
using Documently.Infrastructure;
using Documently.Infrastructure.Installers;
using MassTransit;
using Topshelf;
using log4net;
using log4net.Config;

namespace Documently.Domain.Service
{
    class Program
    {
        private static readonly ILog _Logger = LogManager.GetLogger(typeof (Program));

        private IWindsorContainer _Container;
        private IServiceBus _Bus;

        public static void Main(string[] args)
        {
            Thread.CurrentThread.Name = "Domain Service Main Thread";
            HostFactory.Run(x =>
            {
                x.Service<Program>(s =>
                {
                    s.ConstructUsing(name => new Program());
                    s.WhenStarted(p => p.Start());
                    s.WhenStopped(p => p.Stop());
                });
                x.RunAsLocalSystem();

                x.SetDescription("Handles the domain logic for the Documently Application.");
                x.SetDisplayName("Documently Domain Service");
                x.SetServiceName("Documently.Domain.Service");
            });
        }

        private void Start()
        {
            XmlConfigurator.Configure();
            _Logger.Info("setting up domain service, installing components");

            _Container = new WindsorContainer()
                .Install(
                    new RavenDbServerInstaller(),
                    new CommandHandlerInstaller(),
                    new EventStoreInstaller(),
                    new BusInstaller(Keys.DomainServiceEndpoint)
                    );

            _Container.Register(Component.For<IWindsorContainer>().Instance(_Container));
            _Bus = _Container.Resolve<IServiceBus>();

            _Logger.Info("application configured, started running");
        }

        private void Stop()
        {
            _Logger.Info("shutting down Domain Service");
            _Container.Release(_Bus);
            _Container.Dispose();
        }
    }
}

उदाहरण के साथ चित्रण के लिए +1। मैं बेहतर समझने के लिए आपके उदाहरण को लागू करने का प्रयास करूंगा।
कार्तिक श्रीनिवासन

2

कुछ समय पहले मेरी टीम ने ब्राज़ील में एक बैंक में 3 विंडो सेवाओं को यहां लागू किया, जैसा कि नीचे दिया गया है:

  • सिस्टम के बीच इंटरफेस: हमारे पास एक फ्रंट-ऑफिस एप्लिकेशन था जो स्टॉक मार्केट पर ट्रेडों की बुकिंग के लिए जिम्मेदार था, और एक बैक-ऑफिस एप्लिकेशन, जो ट्रेडों की फीस की गणना और गणना के लिए जिम्मेदार था। प्रारंभ में, इंटरसेक्शन संचार सीधे SQL सर्वर पर किया गया था, लेकिन बहुत अधिक लॉकिंग और अवधारण समस्याओं ने सिस्टम को खराब प्रदर्शन से पीड़ित बना दिया। किसी सेवा को सामने और पीछे दोनों डेटाबेस से जोड़ने और किसी तरह की अवधारण रणनीति का उपयोग करके उचित पढ़ने / लिखने के लिए लागू किया गया था (SQL सर्वर पर हर एक व्यापार को लिखने के बजाय, हम डेटा को कुछ विस्तार तक कहते हैं, 1000 ट्रेडों का कहना है, और एक बल्क इंसर्ट किया, जो मूल समाधान की तुलना में 40 गुना तेज था, और इसमें शामिल कई तालिकाओं को लंबे समय तक लॉक नहीं किया गया)।

  • संदेश कतार: पिछले समाधान के साथ, हमने एक कस्टम संदेश पंक्ति हैंडलर लिखा है, इसलिए कई बैच प्रसंस्करण प्रक्रियाएं अतुल्यकालिक रूप से चल सकती हैं। जो MSMQ और IBM-MQSeries दोनों के साथ एकीकृत था।

  • व्यवसाय सेवाओं का केंद्रीकरण: कई उपयोगकर्ता अनुप्रयोगों को स्टॉक की कीमतों के रूप में आम डेटा की आवश्यकता होती है, इसलिए हमने "मूल्य अनुरोध" प्राप्त करने और कीमत की जानकारी वापस भेजने के लिए जिम्मेदार एक कस्टम सेवा लिखी।

एक पहलू जो हमें "रोबोट" के बजाय सेवाओं को लिखने के लिए प्रेरित करता है, वह यह है कि सेवाएं एक विशिष्ट उपयोगकर्ता के रूप में चल सकती हैं (जैसा कि किसी ने पहले से ही इस धागे पर बताया है), और मशीन के बूट होने पर स्वचालित रूप से शुरू किया जा सकता है।

सेवाओं को चलाने के लिए डेस्कटॉप या विंडो प्रबंधन सेवा की भी आवश्यकता नहीं होती है। वे पृष्ठभूमि पर चल सकते हैं (ठीक है, उन्हें पृष्ठभूमि पर चलना चाहिए )।

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


+1 जीवंत उदाहरण। यहां सभी के द्वारा दिए गए सभी अच्छे उत्तरों से मुझे अब विंडोज़ सेवाओं के उचित उपयोग की बेहतर समझ मिल रही है और मुझे लगता है कि अन्य प्रोग्रामर्स यहाँ ज्ञान साझा करने से निश्चित रूप से लाभान्वित होंगे। कुछ कार्यान्वयन जो मैंने अतीत में काम किए थे, उन्हें विंडोज़ सेवाओं का उपयोग करके बेहतर तरीके से लागू किया जा सकता था।
कार्तिक श्रीनिवासन

0

यदि आप एक विंडोज डेस्कटॉप एप्लिकेशन डिजाइन कर रहे हैं जो मानक उपयोगकर्ता के रूप में चलाने की आवश्यकता है लेकिन कभी-कभी एक कार्य करने की आवश्यकता होती है जिसमें व्यवस्थापक विशेषाधिकारों की आवश्यकता होती है जो आप किसी सेवा का उपयोग कर सकते हैं।

जब आपका इंस्टॉलर आवश्यक अनुमतियों के साथ सेवा स्थापित करता है, तो आपका डेस्कटॉप एप्लिकेशन सेवा में कॉल करता है जब उसे व्यवस्थापक विशेषाधिकार के साथ कार्य करने की आवश्यकता होती है।

इस दृष्टिकोण के लिए सुरक्षा निहितार्थ हैं जो इस उत्तर के दायरे से परे हैं।


अगर मैं सही तरीके से समझूं, तो विंडोज़ की सेवाएं बिना एडमिन की अनुमति के नहीं ली जा सकतीं?
कार्तिक श्रीनिवासन

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

1
निश्चित रूप से एक मानक उपयोगकर्ता विंडोज़ सेवा में शुरू और कॉल कर सकता है। सेवा को किसी व्यवस्थापक उपयोगकर्ता द्वारा स्थापित किया जाना चाहिए।
टेक्सास में जिम

0

प्रोग्रामर के लिए सेवा का उपयोग करने का प्राथमिक कारण है:

  • इस प्रोग्राम को रिबूट के बाद विंडोज मशीन पर स्वचालित रूप से शुरू करने की आवश्यकता है।

आपके द्वारा लिखी गई कोई भी चीज़ जो Windows सेवा के रूप में ऊपर चलनी चाहिए, होनी चाहिए।


0

अंत-उपयोगकर्ता के दृष्टिकोण से, मैंने जो सबसे उपयोगी सेवा लिखी है:
* रॉ-ड्राइवर के साथ डॉट-मैट्रिक्स प्रिंटर पर उपयोगकर्ता ने यूजीली इनवॉइस मुद्रित किया।
* उपयोगकर्ता लोगो, चिकनी-लाइन ग्राफिक्स के साथ एक PRETTY चालान चाहता था।
* विरासत कोड तक कोई पहुंच नहीं।

यह सेवा होगी:
प्रिंट नौकरियों के लिए मॉनिटर (एकाधिक) प्रिंटर फ़ोल्डर।
* चालान का एक पीडीएफ बनाएँ।
* पीडीएफ एक अच्छा रिक्त इनवॉइस छवि को "रेखांकित" करेगा
। कच्चे टेक्स्ट को ओवरले करें
* उपयोग किए जाने वाले फ़ोल्डर के आधार पर मेटा डेटा देखें, (IE: प्रिंटर का उपयोग किया जा रहा है)

फिर मेटाडेटा होगा:
* पीडीएफ उत्पन्न करें
और / या पीडीएफ प्रिंट करें
* / या पीडीएफ को एक अंतिम गंतव्य फ़ोल्डर
* और / या पीडीएफ को हटा दें
* और / या पीडीएफ चालान ग्राहक को ईमेल करें

इस मामले में, यह भूत-लिपि, पीएलसी और पीडीएफ इंजन को संभालता है। यह सालों से बहुत सफाई से चल रहा है। लॉग फ़ाइलों को शामिल करें !!!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.