2009-05-31 6 views
0

Я пытаюсь передать удаленный объект в качестве параметра удалённому методу, но я получаю исключение безопасности, когда удаленный объект пытается запустить метод на полученном удаленном объекте ,Передача удаленного объекта удаленному методу в C#

Это пример удаленного объекта:

public class SharpRemotingDLL : MarshalByRefObject 
{ 
    public String getRemoteMessage(SharpRemotingDLL server) 
    { 
     // the exception is raised here 
     return server.getMessage(); 
    } 

    public String getMessage() 
    { 
     return "Hello World!"; 
    } 
} 

Это сервер стартера (два экземпляра этого работают, один на 127.0.0.10025, другой на 127.0.0.10026):

public static int Main(string[] args) 
{ 
    TcpServerChannel channel; 
    channel = new TcpServerChannel(10025); 
    ChannelServices.RegisterChannel(channel, false); 
    RemotingConfiguration.RegisterWellKnownServiceType(
     typeof(SharpRemotingDLL), 
     "SharpRemotingDLL", 
     WellKnownObjectMode.Singleton); 
    Console.ReadLine(); 
    return 0; 
} 

И это клиент:

static void Main(string[] args) 
{ 
    SharpRemotingDLL server0 = (SharpRemotingDLL) 
     Activator.GetObject(typeof(SharpRemotingDLL), 
     "tcp://localhost:10025/SharpRemotingDLL"); 
    SharpRemotingDLL servers[1] = (SharpRemotingDLL) 
     Activator.GetObject(typeof(SharpRemotingDLL), 
     "tcp://localhost:10026/SharpRemotingDLL"); 
    Console.WriteLine(server0.getRemoteMessage(server1)); 
} 

Как правильно передать сервер1 в качестве параметра в getRemoteMessage метод?

ответ

0

Я уже писал этот код, но я никогда не пытался передать объект сервера другому объекту сервера таким образом. Я не эксперт по безопасности, но я могу понять, почему это может быть запрещено.

Вы должны получить сообщение непосредственно с Server1, а не запрашивать у него другой удаленный сервер. Другими словами, ваша логика поиска сообщений должна быть в клиенте.

+0

Это был всего лишь пример кода для демонстрации проблемы. В моем реальном коде SharpRemotingDLL представляет собой класс, экспортирующий основные операции с файлами (CreateFile, ReadFile и т. Д.), И я использую аналогичный синтаксис для реализации CopyFile и MoveFile между двумя серверами: Использование клиентов server1.CopyFile ("foo. .txt», server2) метод CopyFile: общественного недействительного CopyFile (имя String, сервер SharpRemotingDLL) { server.WriteFile (имя, this.ReadFile (имя)); } – vbigiani

+0

Что такое точная формулировка сообщения об ошибке? –

+0

Я не могу перевести именно потому, что моя ОС находится на итальянском языке, а поиск в Google для сообщения об ошибке бесполезен. Во всяком случае: http://pastebin.com/m6219b56f – vbigiani

Смежные вопросы