Передать удаленный объект удаленному методу в C # - PullRequest
0 голосов
/ 31 мая 2009

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

Это образец удаленного объекта:

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));
}

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

Ответы [ 2 ]

0 голосов
/ 31 мая 2009

vbigiani,

Эта статья должна пролить свет на вашу проблему:

http://weblogs.asp.net/jan/archive/2003/06/01/8106.aspx

Если это не сработает, вы можете получить несколько релевантных обращений Google здесь:

Из-за ограничений безопасности тип System.Runtime.Remoting.ObjRef недоступен

0 голосов
/ 31 мая 2009

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

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

...