从另一个AppDomain调用时,RemotingServices.Marshal()不起作用

时间:2013-08-26 13:51:59

标签: c# .net remoting

我正在尝试将我的对象设置为远程服务器。我为此使用了RemotingServices.Marshal(myObj, uri)。我有以下代码:

public class IpcRemoteObject : MarshalByRefObject
{
    public void Register()
    {
        var channel = new IpcChannel("ipcSample");
        ChannelServices.RegisterChannel(channel, false);
        RemotingServices.Marshal(this, "test", typeof(IpcRemoteObject));
        Console.WriteLine("Created server, waiting for calls");
        Console.ReadLine();
    }
}

如果我从我的程序的Main()中调用它,如下所示,一切正常:

// case 1: works
new IpcRemoteObject().Register();

但是,如果我在下面的另一个AppDomain中创建对象,则从客户端连接时会收到“RemotingException:Requested Service not found”。

// case 2: completes without error, but client connections fail
var appDomain = AppDomain.CreateDomain("foo");
var remoteObj = (IpcRemoteObject)appDomain.CreateInstanceAndUnwrap(assembly, typename);
remoteObj.Register();

然后,如果我创建一个代表我调用Register()并在另一个appdomain中实例化该类的中间类,那么一切都恢复正常:

// case 3: works
class Bootstrapper : MarshalByRefObject
{
    public void Register()
    {
         new IpcRemoteObject().Register();
    }
}
...
var appDomain = AppDomain.CreateDomain("foo");
var bootstrapper = (Bootstrapper)appDomain.CreateInstanceAndUnwrap(
                                          bootstrapperAssembly, bootstrapperType);
bootstrapper.Register(); // works

所以,这是一个问题:为什么RemotingServices.Marshal()在案例2中不起作用?是否存在某种规则,还是仅仅是远程处理中的错误?我正在使用.NET framework 4.5。

0 个答案:

没有答案