2009-12-30 5 views
5

चलाने से विधि को कॉल करने के लिए कैसे मैंने सी # 2005 का उपयोग कर विंडोज सेवा सेवा 1 (MyService.exe के रूप में exe के साथ) बनाया और शुरू किया है। मैंने एक विधि GetMyRandomNumber() शामिल किया है जो एक यादृच्छिक डबल मान देता है।विंडोज सेवा

यहां समस्या यह है कि इस चल रही सेवा का उपयोग कैसे किया जा सकता है और मैं विधि को कैसे कॉल कर सकता हूं।

मैं MyService.exe के संदर्भ जोड़ने की कोशिश की और के रूप में विधि का उपयोग किया है -

Service1 s = new Service1(); 
MessageBox.Show(s.GetMyRandomNumber().ToString()); 

लेकिन पाया गया कि विधि सेवा के चल उदाहरण से नहीं बुलाया जाता है यानी भले ही मैं सेवा बयान रोक निष्पादित कर रहे हैं

क्या कोई मुझे समझा सकता है कि मैं सेवा के उदाहरण को चलाने से विधि को कैसे कॉल कर सकता हूं।

अपना मूल्यवान समय साझा करने के लिए धन्यवाद।

उत्तर

14

अपने कोड में, आप वास्तव में सेवा को फोन नहीं कर रहे हैं होना चाहिए बजाय आप निष्पादन योग्य और invok संदर्भित कर रहे हैं उस असेंबली से एक विधि में (रन टाइम पर .NET Framework कोड को निष्पादित करने के लिए स्थानीय असेंबली का उपयोग करेगा, न कि आपकी चल रही सेवा)।

आप जो चाहते हैं उसे करने के लिए, आपके पास कई विकल्प हैं।

.NET 2.0 में, आप .NET Remoting का उपयोग करेंगे। आप एक रिमोटिंग इंटरफ़ेस बनाते हैं, जो अन्य असेंबली एक्जिक्यूटिव में विधियों को आमंत्रित करने के लिए उपयोग कर सकते हैं।

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

.NET Remoting या इसके प्रतिस्थापन, विंडोज संचार फाउंडेशन दोनों के लिए वेब पर कई अच्छे ट्यूटोरियल हैं।

+2

+1 डब्ल्यूसीएफ इस परिदृश्य में सही विकल्प होगा यदि .NET 3.0+ पर। पूर्णता के लिए मैं यह जोड़ना चाहता हूं कि हालांकि डब्ल्यूसीएफ लगभग सभी मामलों में रिमोटिंग को प्रतिस्थापित करता है, फिर भी यह क्रॉस-एपडोमेन संचार के लिए एक जगह है - मैं एपडोमेन सीमाओं में संचार के लिए डब्ल्यूसीएफ का उपयोग नहीं करता, लेकिन अन्य सभी मामलों में, डब्ल्यूसीएफ है सही विकल्प –

2

किसी चल रही सेवा के साथ संचार करना किसी भी अन्य चल रही प्रक्रिया पर आविष्कार विधियों से अलग नहीं है। इसका मतलब है कि प्रक्रिया-प्रक्रिया प्रक्रिया के लिए आपको अपने मानक उपकरण खोदने की आवश्यकता होगी।

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

2

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

+1

डब्ल्यूसीएफ नामित पाइप का उपयोग कर सकते हैं। http://msdn.microsoft.com/en-us/library/ms733769.aspx –

+2

वह सी # 2005 (नेट 2.0?) का उपयोग कर रहा है, इसलिए डब्ल्यूसीएफ एक विकल्प नहीं है। – Giorgi

+1

अच्छा अवलोकन। मैंने यह नहीं देखा था। –