2012-02-13 59 views
7

Piszę aplikację .NET Remoting. Mam wszystkie moje biblioteki dll, serwer i klient działają poprawnie. Jednak, gdy próbuję zmienić wywołanie metody, aby pobrać parametr obiektu zamiast prostego typu, takiego jak int, narzeka z tym błędem..NET Remoting, przekazywanie obiektów do metod

Rodzaj System.Runtime.Remoting.ObjRef i typy od niego (jak System.Runtime.Remoting.ObjRef) nie mogą być rozszeregować na tym poziomie bezpieczeństwa.

Ta metoda jest podobna do tej.

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

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

[Serializable] 
public class Users : MarshalByRefObject { 

Teraz zrobiłem klasa User również [Serializable] i biorąc pod uwagę to MarshalByRefObject dziedziczenie. Czy to może być mój problem? Próbowałem usunąć [Serializable] z klasy User i narzeka, ponieważ nie może tego zinterpretować.

EDYTOWANIE OK, oto moja metoda klienta.

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

Oto mój serwer.

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

Czy próbowałeś usuwając ' MarshalByRefObject' z klasy Users? –

+0

Nie w pełni wypróbowałem, że pozwól mi wrócić i upewnij się, że – meanbunny

+0

Po usunięciu MarshalByRefObject nie pomogło, dzięki! – meanbunny

Odpowiedz

2

W rzeczywistości, .NET remoting jest przestarzałą technologią. Zamiast tego powinieneś spojrzeć na WCF.

Jeśli chodzi o aktualny problem: Prawdopodobnie masz uruchomioną aplikację na poziomie zaufania, który jest zbyt niski.
Klasa Users powinien być możliwy do serializacji, ale jeśli nie zawiera żadnych metod, które powinny pracować na serwerze, nie powinno wynikać z MarshalByRefObject

+9

Prawdopodobnie, remoting nadal służy do rozmawiania między AppDomains w tym samym procesie.Po prostu mówię " –

+0

Nie przeglądałem jeszcze WCF, a klasa User nie zawiera żadnych niezbędnych wywołań, które musiałyby odziedziczyć MarshalByRefObject. Próbowałem przejść prostą trasę i utworzyć pojedynczą bibliotekę DLL, która mogłaby zostać wykorzystana do aplikacji serwera i klienta, zamiast tworzyć wiele bibliotek DLL. – meanbunny

+0

Praktycznym problemem związanym z używaniem przestarzałej technologii jest to, że jest mniej osób, które ją pamiętają. Po prostu ledwo pamiętałem, że już widziałem ten błąd, ale nie jak to naprawić. I jestem ... stary. –

2

zapewnić zarówno konfigurację serwera i klienta ustawić właściwość typeFilterLevel do Full

lub mają swoją klasę User wdrożyć ISerializable

MSDN Documentation on .NET Remoting Serialization Security.

+0

Ok po zaimplementowaniu tego, daje mi następujący błąd, gdy metoda próbuje uderzyć DB. 'Ten zdalny serwer proxy nie ma ujścia kanału, co oznacza, że ​​serwer nie ma zarejestrowanych kanałów serwera, które nasłuchują, lub ta aplikacja nie ma odpowiedniego kanału klienta do komunikowania się z serwerem." – meanbunny

+0

Pozwól, że będę dokładniejszy, kiedy spróbuję uzyskać dostęp do Właściwość User.UserID zgłasza ten wyjątek. – meanbunny

+0

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

4

„nie mogą być de serializowane na tym poziomie bezpieczeństwa. " to znacząca część.

można znaleźć w następujących odpowiedzi

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

ustawić następujące zarówno klienta, jak i serwera:

typeFilterLevel = "Full" w tagu Formatter

+0

Jeśli nie konfiguruję tego za pomocą pliku konfiguracyjnego, w jaki sposób mogę to zrobić? – meanbunny

+1

Odpowiedź jest tutaj: http://www.alexthissen.nl/blogs/main/archive/2007/12/23/back-to-net-remoting-typefilterlevel.aspx – Chriseyre2000

+0

Podany link jest uszkodzony. Nowy jest https://alexthissen.wordpress.com/2007/12/23/back-to-net-remoting-typefilterlevel/ –

Powiązane problemy