c# - In .NET remoting what is the difference between RemotingConfiguration.RegisterWellKnownServiceType and RemotingServices.Marshal? -


रिमोटिंग कॉन्फ़िगरेशन के बीच अंतर क्या है। .NET remodeling.RegisterWellKnownServiceType और RemotingServices.Marshal?

क्या मैं करना चाहते हैं एक Windows सेवा में एक ऑब्जेक्ट बनाते हैं, फिर इसे एक रिमोटिंग ऑब्जेक्ट के रूप में रखें और विंडोज सर्विस और क्लाइंट दोनों को रिमोटिंग ऑब्जेक्ट पर कार्य करें।

मैंने सोचा था कि नीचे कोड यह पूरा करेगा ।

<पूर्व> FooRemoting foo = नया FooRemoting (); रिमोटिंग कॉन्फ़िगरेशन। पंजीयक विल्सनसॉवेनससेचर टाईप (टाइपफ (फूरमोटिंग), सर्वरनाम, वेलकेनऑब्जेक्टमॉड। सिग्लेटन); RemotingServices.Marshal (foo);

यह वही है जो मैंने पाया है।

  रिमोटिंग कॉन्फ़िगरेशन .RegisterWellKnownServiceType (टाइपफ (FooRemoting), सर्वरनाम, वेलकेनऑब्जेक्टमॉड। सिग्लेटन);  

पंजीकृत करेंवैलकाएनसाइसटाइप ऑब्जेक्ट बनायेगा और इसे किसी भी क्लाइंट के लिए सिंगलटन बना देगा जो इसे खपता है, लेकिन सर्वर द्वारा कोई संदर्भ नहीं बनाया गया है। ऑब्जेक्ट तब तक नहीं बनाया जाता जब तक ग्राहक इसके लिए नहीं मांगता, और एक ही ऑब्जेक्ट को किसी अन्य क्लाइंट के लिए उपयोग किया जाता है।

  रिमोटिंग सर्विसेज। मार्शल (फू);  

मार्शल एक ऐसे ऑब्जेक्ट को पंजीकृत करेंगे जो सर्वर द्वारा बनाई गई है, इस मामले में एक विंडो सेवा। तब सर्वर के पास ऑब्जेक्ट का संदर्भ होगा और क्लाइंट समान ऑब्जेक्ट का उपभोग करेगा।

मेरी समस्या रिमोटिंग ऑब्जेक्ट को पंजीकृत करने के लिए मार्शल का उपयोग कर रहा था। समय के साथ-साथ क्लाइंट को उपभोग करने के लिए रिमोटिंग ऑब्जेक्ट गायब हो जाएंगे, अर्थात रिमोटिंग ऑब्जेक्ट पर अब नहीं। सेवा अभी भी इसका संदर्भ रखेगी फिर मैंने पंजीयन की कोशिश की, वैसे भी, जब भी मैं एक ही ऑब्जेक्ट के संदर्भ में सेवा प्राप्त नहीं कर सका।

इस मामले में रिमोटिंग ऑब्जेक्ट को ओवरराइड किया जा रहा है, फूरामोटिंग। अगर मैं InitializeLifetimeService ओवरराइड और शून्य लौटा, तो ग्राहक कभी कनेक्शन खो देंगे, और सेवा, कनेक्शन रखना होगा।

  सार्वजनिक ओवरराइड ऑब्जेक्ट initializeLifetimeService () {// वापसी base.InitializeLifetimeService () ; वापसी नल; }  

ऑब्जेक्ट को सेवा द्वारा बनाए रखने के लिए और ग्राहक को समान ऑब्जेक्ट का उपयोग करने के लिए आपको

  RemotingServices.Marshal (foo) का उपयोग करना चाहिए। ;  

और ओवरराइड आरंभ करें लौटने के लिए लाइफटाइम सेवा।


Comments