पर सार्वजनिक विधि को कॉल करना मेरे पास विंडोज़ सेवा (.NET C#) में एक टाइमर है। मुझे बाहरी कार्यक्रम से विलुप्त मूल्य को बदलने में सक्षम होना चाहिए। यदि टाइमर वर्तमान में चल रहा है, तो मुझे बाहरी प्रोग्राम से समय बीतने वाले मूल्य को कम करने में सक्षम होना चाहिए। मैं उस सेवा में सार्वजनिक विधि रखने की सोच रहा था जो टाइमर विलुप्त मूल्य को बदल देगा और टाइमर को पुनरारंभ करेगा, लेकिन क्या बाहरी प्रोग्राम विंडोज़ सेवा पर सार्वजनिक विधि को कॉल कर सकता है?विंडोज सेवा
उत्तर
संक्षेप में, किसी अन्य प्रक्रिया में सीधे कार्यों को कॉल करना संभव नहीं है। जिस प्रक्रिया में आप जिस फ़ंक्शन को एक्सेस करना चाहते हैं, उस प्रक्रिया में (इस मामले में, आपकी विंडोज सेवा) को किसी प्रकार के आईपीसी (इंटर-प्रोसेस संचार) के माध्यम से इसे बेनकाब करने की आवश्यकता होगी। आप किस प्रकार का आईपीसी चुनते हैं, इस पर निर्भर करेगा कि संचार को कितना जटिल होना चाहिए, और "क्लाइंट" एक .NET एप्लिकेशन है या नहीं।
यदि आपकी ज़रूरतें सरल हैं (उदाहरण के लिए केवल टाइमर मान निर्धारित करें), या यदि आपका क्लाइंट नामित पाइप (या टीसीपी, यदि आपको किसी अन्य भौतिक मशीन से सेवा तक पहुंचने की आवश्यकता है) का उपयोग करके .NET का उपयोग नहीं करता है, तो शायद आपका बेहतर परिणाम के यह करें। दोनों नामित पाइप और टीसीपी आपको एक स्ट्रीम देते हैं कि आप संदेश लिख सकते हैं और दूसरे छोर पर पढ़ सकते हैं।
यदि आपको कई अलग-अलग फ़ंक्शंस का खुलासा करना है या जटिल डेटा प्रकार भेजना और प्राप्त करना है, और यदि आप दोनों सिरों पर .NET का उपयोग कर रहे हैं, तो .NET Remoting या WCF शायद सबसे अच्छा है। .NET Remoting सरल है लेकिन इसमें अधिक बाधाएं हैं; डब्ल्यूसीएफ बहुत लचीला है लेकिन इसमें एक तेज सीखने की वक्र है।
आप सीधे विंडोज सेवा प्रक्रिया में कोई विधि नहीं कॉल कर सकते हैं, लेकिन उदाहरण के लिए, विंडोज़ सेवा इस कार्य को डब्ल्यूसीएफ सेवा के रूप में उजागर कर सकती है। विंडोज सेवा एक सेवा मेजबान के रूप में भी काम करेगा। यह संभव है और जटिल नहीं है।
हां यह संभव है।
आप अपनी सेवा पर नेट नामांकित पाइप एंडपॉइंट बनाने और उस इंटरफ़ेस के माध्यम से सेवा को नियंत्रित करने पर विचार करना चाहेंगे।
NetNamedPipeBinding binding = new NetNamedPipeBinding();
MyService myService = new MyService(binding,
new EndpointAddress("net.pipe://localhost/MyService"));
myService.ResetTimer(30);
MyService 2 ऑर्गेसमेंट नहीं ले रहा है .. –
पुरानी (गैर डब्ल्यूसीएफ) सेवाएं .NET Remoting का उपयोग कर सकती हैं। कैसे शुरू करें इस बारे में कुछ जानकारी के लिए here पर एक नज़र डालें। प्रक्रिया प्रक्रियाओं में अनुप्रयोगों के बीच संचार करने का यह पूर्व-डब्ल्यूसीएफ तरीका है।
.NET Remoting को विरासत तकनीक माना जाता है और नए विकास के लिए अनुशंसित नहीं है (http://msdn.microsoft.com/en-us/library/72x4h507%28VS.85% 29.aspx)। विंडोज संचार फाउंडेशन (डब्ल्यूसीएफ) ऐसा करने का अनुमोदित तरीका है। यदि आप डब्ल्यूसीएफ से अपरिचित हैं, तो प्रौद्योगिकी के परिचय के लिए इस वीडियो को देखें (http://www.dnrtv.com/default.aspx?showNum=135)। –