2012-10-17 18 views
8

के माध्यम से स्ट्रीम को वापस करते हैं तो कवर के तहत क्या होता है मैं दूरस्थ सेवा (.NET Remoting) से Streams लौटा रहा हूं। लेकिन Streams भी डिस्पोजेबल हैं जिन्हें हम सभी जानते हैं कि उनका निपटान किया जाना है।जब आप रिमोट ऑब्जेक्ट से .NET Remoting

मैं ग्राहकों का उपभोग करने के बाद ग्राहक पक्ष पर Dispose पर कॉल कर सकता हूं। हालांकि, मैं जानना चाहता हूं कि जब मैं रिमोट ऑब्जेक्ट से Stream वापस करता हूं तो कवर के नीचे वास्तव में क्या होता है।

विशेष रूप से:

  1. मैं बेहतर एक byte[] में सब कुछ पढ़ा है और की है जो Stream के बजाय करना चाहिए?
  2. या .NET रीमोटिंग ठीक उसी तरह के कवर के तहत मेरे लिए कर रहा है?
  3. यदि नहीं, तो byte[] लौटने से Stream वापस कैसे लौट रहा है? अंत में, .NET Remoting किसी भी तरह से डेटा को क्रमबद्ध करना चाहिए?
  4. क्या क्लाइंट पक्ष पर Dispose पर कॉल करना भी कोई प्रभाव नहीं पड़ता है? क्लाइंट साइड पर ऑब्जेक्ट और सर्वरसाइड पर ऑब्जेक्ट के बीच कोई जादुई कनेक्शन है? मुझे लगता है कि एक बार यह कवर के पीछे deserialized है, ग्राहक पक्ष पर Dispose() पर कॉल करने में कोई समझ नहीं है या वहाँ है?

मैं यहाँ माइक बिल्ड करने के लिए जवाब देने रहा हूँ क्योंकि मैं भी एक छोटे से सवाल

ठीक सुधार करना चाहते हैं, तो धारा सर्वर पर बात कर (मेरे लिए कम से कम) अप्रत्याशित है।

public static class ServiceFactory <T> 
{ 
    public static T CreateProxy() 
    { 
     Type interfaceType = typeof(T); 

     string uri = ApplicationServer.ServerURL + interfaceType.FullName; 

     return (T)Activator.GetObject(interfaceType, uri); 
    } 
} 

तो आप स्पष्ट रूप से कुछ URI पर विशिष्ट दूरस्थ वस्तु का उपभोग करने के लिए बाहर तक पहुंच रहे हैं:

एक दूरस्थ वस्तु एक कुछ इस तरह करना है cosume करने के लिए। और जब उस रिमोट ऑब्जेक्ट पर कोई विधि किसी ऑब्जेक्ट को लौटाती है जो मार्शलबीरफॉबजेक्ट से प्राप्त होती है जिसका अर्थ है कि यह स्वचालित रूप से दूरस्थ पक्ष पर ऑब्जेक्ट से जुड़ा हुआ है? ठीक है, मेरे द्वारा निर्मित एक परीक्षण ऑब्जेक्ट के साथ पुन: पेश करना आसान होना चाहिए। तो इसका मतलब यह भी है कि मुझे क्लाइंट पक्ष पर निपटान करना चाहिए और यह सर्वर की तरफ ऑब्जेक्ट पर वापस आ गया है?

+0

मार्शलब्राइफ ऑब्जेक्ट को क्लाइंट साइड पर आजीवन प्रबंधन के लिए कभी भी IDISposable लागू करना चाहिए। हां, क्लाइंट पक्ष पर निपटान() का आह्वान करें सर्वर पक्ष पर "साझा" ऑब्जेक्ट का निपटान करें। –

+0

मेरी सिफारिश - एमबीआर ऑब्जेक्ट्स के साथ सभी प्रकार के लिए IDISposable लागू करें जब तक कि आप बाइट्स की सरणी जैसे स्मृति को स्ट्रीम करने या फ़ाइल –

+0

जैसी नई स्ट्रीम को ठीक नहीं करते हैं, ठीक है, आप 100% सही हैं :) मैंने अभी एक कस्टम ऑब्जेक्ट लौटाया है जो विरासत में मिला है एमबीआर से और इसे दृश्यमान बनाने के लिए ब्रेकपॉइंट सेट करें। मेरे पास हमेशा चीजों को दिखने के लिए पागल मांग है :) मजाकिया पहलू यह है: मैंने 200 9 में दो तरह के अधिसूचना सेवा सहित एक सामान्य अनुप्रयोग सर्वर लिखा था जो इस तरह से काम करने के बिना संभव नहीं होगा। http://www.mycsharp.de/wbb2/thread.php?threadid=75670 मुझे इसके बीच में भूल जाना होगा। वैसे भी, महान मेरे दिमाग को ताज़ा करने के लिए समय लगा! – Christoph

उत्तर

2

ए स्ट्रीम एक मार्शलबीरफॉबजेक्ट है। एक विशेष प्रकार की बात है। यह एक प्रॉक्सी है।

  1. आप दोनों के साथ नेट दूरस्थ में काम कर सकते हैं
  2. नहीं, यह है एक उत्पन्न प्रॉक्सी पर एक अन्य प्रकार - से विरासत के लिए देखो MarshalByRefObject
  3. http://msdn.microsoft.com/en-us/library/system.marshalbyrefobject.aspx
  4. हाँ, पर एक छोटा सा जादू प्रॉक्सी क्लास
संबंधित मुद्दे