我正在尝试将远程对象作为参数传递给远程方法,但是当远程对象尝试在接收的远程对象上运行方法时,我收到安全性异常。
这是一个示例远程对象:
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方法?
答案 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