2012-02-13 5 views
7

Я пишу приложение .NET Remoting. У меня всегда работает моя dll, сервер и клиент. Однако, когда я пытаюсь изменить вызов метода для принятия параметра объекта вместо простого типа типа int, он жалуется на эту ошибку..NET Remoting, передача объектов в методы

Тип System.Runtime.Remoting.ObjRef и типы из нее (например, System.Runtime.Remoting.ObjRef) не разрешается десериализовать на этом уровне безопасности.

Метод такой.

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

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

[Serializable] 
public class Users : MarshalByRefObject { 

Теперь я сделал класс Пользователь также, [Serializable] и дал ему MarshalByRefObject наследство. Может ли это быть моей проблемой? Я попытался удалить [Serializable] из класса User, и он жалуется, что он не может его интерпретировать.

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

Вы пробовали путем удаления ' MarshalByRefObject' из класса Users? –

+0

Я еще не пробовал, что позволил мне вернуться и убедиться, что – meanbunny

+0

Когда я удалил MarshalByRefObject, он не помог, спасибо! – meanbunny

ответ

2

На самом деле, .NET remoting - это устаревшая технология. Вместо этого вы должны взглянуть на WCF.

Что касается вашей реальной проблемы: Возможно, ваше приложение работает на слишком низком уровне доверия.
Users класс должен быть сериализации, но, если он не содержит каких-либо методов, которые должны выполняться на сервере, не следует выводить из MarshalByRefObject

+9

, возможно, удаленное использование все еще служит для разговора между AppDomains в том же процессе.Просто sayin ' –

+0

Я еще не просмотрел WCF, и класс User не содержит никаких необходимых вызовов, которые должны были бы наследовать MarshalByRefObject. Я пытался проделать простой маршрут и создать единую DLL, которая может быть использована для сервера и клиентского приложения вместо создания нескольких DLL. – meanbunny

+0

Практическая проблема с использованием устаревшей технологии заключается в том, что людей, которые ее помнят, меньше. Я едва помнил, что раньше видел эту ошибку, но не как ее исправить. И я _old_. –

2

Убедитесь, как конфигурация сервера и клиента установить свойство typeFilterLevel в Full

или ваш 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

«не разрешается быть отменено сериализован на этом уровне безопасности ». является значительной частью.

Смотрите следующий ответ

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

Установите следующие на клиенте и сервере:

typeFilterLevel = "Полный" в Formatter теге

+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/ –