我想知道线程是如何使用MarshalByRef对象服务器侧处理。

由于我远程的MarshalByRef类:

public class MyRemotedClass : MarshalByRef
{
  public int MyInt;
  public string MyString;
}

客户机代码(单线程):

MyRemotedClass m = GetSomehowMyRemotedClass(); 
m.MyInt = 5; // Write operation 1
m.MyString = "Hello World"; // Write operation 2

在服务器端,我们有两个写操作。我认为线程是从线程池。然而,由于类是MarshalByRef,既opeations是独立的远程过程调用。他们要在不同的线程上运行?如果是的话,可以将其发生之前操作1点结束执行该操作2去?

PS:制作MyRemotedClass MarshalByRef是错误的决定。但我不能改变这种状况,所以请不要建议。

有帮助吗?

解决方案

我不是这方面的专家,但我真的期望的在写MyInt已经可靠地完成之前的客户端事件试图写入MyString除非你有一些时髦的异步行为正在进行。

毕竟,如果分配由于某种原因失败的处理的唯一明智的方法就是出发,IMO之前抛出异常。

其他提示

事实上,据我会想想,设置2个属性没有发生异步,所以客户端等待,直到前,将与RPC 2开始的第一个RPC完成。

无论如何,如果你MyRemotedClass未配置为一个单独的服务器激活的对象,也请记住,为您在MyRemotedClass做的每RPC,一个新的实例将在服务器上创建。这意味着,远程对象不应该包含任何状态。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top