2012-02-13 10 views
7

में ऑब्जेक्ट पास करना मैं एक .NET Remoting एप्लिकेशन लिख रहा हूं। मेरे पास मेरा डीएलएल, सर्वर और क्लाइंट सही ढंग से काम कर रहा है। हालांकि, जब मैं एक int प्रकार की तरह एक सामान्य प्रकार के बजाय ऑब्जेक्ट पैरामीटर लेने के लिए अपनी विधि कॉल को बदलने का प्रयास करता हूं, तो यह इस त्रुटि से शिकायत करता है।.NET Remoting, विधियों को

प्रकार System.Runtime.Remoting.ObjRef और यह (जैसे System.Runtime.Remoting.ObjRef) से प्रकार इस सुरक्षा स्तर पर deserialized किए जाने की अनुमति नहीं है।

विधि इस तरह कुछ है।

public List<Orders> GetOrders(int UserID) { //Works 

public List<Orders> GetOrders(Users user) { // Doesnt Work 

[Serializable] 
public class Users : MarshalByRefObject { 

अब मैं उपयोगकर्ता वर्ग भी बना दिया है, [Serializable] और यह दिया MarshalByRefObject विरासत। क्या यह मेरी समस्या हो सकती है? मैंने उपयोगकर्ता वर्ग से [Serializable] को हटाने का प्रयास किया है और यह शिकायत करता है क्योंकि यह इसकी व्याख्या नहीं कर सकता है।

EDIT ठीक है, यह मेरी क्लाइंट विधि है।

IChannel channel = new TcpClientChannel(); 
ChannelServices.RegisterChannel(channel, false); 
CustomType Server = (CustomType)Activator.GetObject(typeof(CustomType), "tcp://localhost:9934/CustomType"); 

यहां मेरा सर्वर है।

BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider(); 
provider.TypeFilterLevel = TypeFilterLevel.Full; 
IDictionary props = new Hashtable(); 
props["port"] = 9934; 
TcpChannel channel = new TcpChannel(props, null, provider); 
ChannelServices.RegisterChannel(channel); 
RemotingConfiguration.RegisterWellKnownServiceType(typeof(CustomType), "CustomType", WellKnownObjectMode.Singleton); 
Console.WriteLine("Server is initialized"); 
Console.ReadLine(); 
+1

आप को दूर करने की कोशिश की है 'द्वारा उपयोगकर्ता वर्ग से मार्शल ByRefObject'? –

+0

मैंने पूरी तरह से कोशिश नहीं की है कि मुझे वापस जाने दें और सुनिश्चित करें कि – meanbunny

+0

जब मैंने मार्शलबीरफॉब्जेक्ट को हटा दिया तो यह मदद नहीं की, धन्यवाद! – meanbunny

उत्तर

2

दरअसल, .NET रीमोटिंग एक अप्रचलित तकनीक है। आपको इसके बजाय डब्ल्यूसीएफ पर एक नज़र रखना चाहिए।

आपकी वास्तविक समस्या के बारे में: शायद आप अपने आवेदन को ट्रस्ट-स्तर में चला रहे हैं जो बहुत कम है।
Users वर्ग serializable होना चाहिए, लेकिन, अगर यह किसी भी तरीके कि सर्वर पर चलाना चाहिए शामिल नहीं है, यह से MarshalByRefObject

+9

तर्कसंगत रूप से, रीमोटिंग अभी भी उसी प्रक्रिया में ऐपडोमेन्स के बीच बात करने के लिए उपयोग की सुविधा प्रदान करता है।बस कहना है ' –

+0

मैंने अभी तक डब्लूसीएफ को देखा है, और उपयोगकर्ता वर्ग में कोई आवश्यक कॉल नहीं है जिसे मार्शलबीरफॉबजेक्ट का वारिस करने की आवश्यकता होगी। मैं सरल मार्ग जाने और एक डीएलएल बनाने की कोशिश कर रहा था जिसका उपयोग कई डीएलएल बनाने के बजाय सर्वर और क्लाइंट एप्लिकेशन के लिए किया जा सकता था। – meanbunny

+0

एक अप्रचलित तकनीक का उपयोग करने में व्यावहारिक समस्या यह है कि कम लोग हैं जो इसे याद करते हैं। मुझे बस मुश्किल से याद आया कि मैंने पहले यह त्रुटि देखी थी, लेकिन इसे ठीक करने का तरीका नहीं था। और मैं _old_ हूँ। –

2

प्राप्त नहीं करना चाहिए Full

करने के लिए दोनों सर्वर और ग्राहक विन्यास typeFilterLevel गुण सेट सुनिश्चित करें

या अपने User वर्ग को लागू ISerializable

MSDN Documentation on .NET Remoting Serialization Security.

+0

ठीक है जब भी मैं इसे कार्यान्वित करता हूं, यह विधि मुझे निम्न त्रुटि देता है जब विधि डीबी को हिट करने का प्रयास करती है। 'इस रिमोटिंग प्रॉक्सी में कोई चैनल सिंक नहीं है जिसका अर्थ है कि सर्वर के पास कोई पंजीकृत सर्वर चैनल नहीं है जो सुन रहा है, या इस एप्लिकेशन के पास सर्वर से बात करने के लिए कोई उपयुक्त क्लाइंट चैनल नहीं है।' – meanbunny

+0

जब भी यह पहुंचने का प्रयास करता है तो मुझे और अधिक विशिष्ट होने दें User.UserID संपत्ति यह अपवाद फेंकता है। – meanbunny

+0

http://stackoverflow.com/questions/1657863/remoting-and-missing-channel-sinks – Alan

4

"डी करने की अनुमति नहीं कर रहे हैं इस सुरक्षा स्तर पर serialized। " महत्वपूर्ण हिस्सा है।

जवाब

http://www.codeproject.com/Articles/4363/NET-Remoting-in-Simple-English-Really-it-s-that-s

दोनों क्लाइंट और सर्वर पर निम्न सेट के लिए निम्नलिखित देखें:

typeFilterLevel = फ़ॉर्मेटर टैग में "पूर्ण"

+0

अगर मैं इसे कॉन्फ़िगर फ़ाइल के माध्यम से सेट नहीं कर रहा हूं तो मैं इसे कैसे कर सकता हूं? – meanbunny

+1

उत्तर यहां है: http://www.alexthissen.nl/blogs/main/archive/2007/12/23/back-to-net-remoting-typefilterlevel.aspx – Chriseyre2000

+0

प्रदान किया गया लिंक टूटा हुआ है। नया एक है https://alexthissen.wordpress.com/2007/12/23/back-to-net-remoting-typefilterlevel/ –

संबंधित मुद्दे