将远程对象传递给C#中的远程方法

时间:2009-05-31 15:28:13

标签: c# remoting

我正在尝试将远程对象作为参数传递给远程方法,但是当远程对象尝试在接收的远程对象上运行方法时,我收到安全性异常。

这是一个示例远程对象:

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 :(得分:0)

我之前编写过这种代码,但我从未试图以这种方式将服务器对象传递给另一个服务器对象。我不是安全专家,但我可以理解为什么不允许这样做。

您应该直接从Server1获取消息,而不是要求其他远程服务器返回它。换句话说,您的消息检索逻辑需要在客户端。

答案 1 :(得分:0)

vbigiani,

这篇文章应该说明你的问题:

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

如果这不起作用,您可以在此处获得几个相关的Google点击:

Because of security restrictions, the type System.Runtime.Remoting.ObjRef cannot be accessed