我正在编写一个通过MarshalByRefObject使用.net Remoting的应用程序。 我可以连接,一切都适用于方法调用等简单的事情。 现在的问题是,当我尝试访问从早期调用收到的对象的属性时,属性 - 获取者执行“客户端” - 而不是在主机进程内。
在这些getter中,我在本地进程上使用Marshalling,因此它们需要在主机进程而不是客户端上运行。
我现在的问题:是否有任何特定的方法来实现我正在尝试做的事情,或者我必须走这条路线并在主机端在暴露的接口中编写其他方法并实现类,这将返回吸气剂的价值?
我的代码如下所示:
MyApi api = new MyApi();
var channel = new IpcChannel(processId.ToString());
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.On;
RemotingConfiguration.ApplicationName = "MyApi-Server" + processId;
RemotingServices.Marshal(api, "service");
用于主持人进程。
这就是客户端
api = (IMyApi)Activator.GetObject(typeof(IMyApi), "ipc://MyApi-" + process.Id + "/service");
MessageBox.Show(api.GetSomething().Someproperty);
感谢您的帮助
答案 0 :(得分:0)
outch,我是愚蠢的。 不仅接口类的实现应该来自MarshalByRefObject,我传给的所有其他对象也应该。