.NET远程线程模型
-
22-08-2019 - |
题
我想知道线程是如何使用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,一个新的实例将在服务器上创建。这意味着,远程对象不应该包含任何状态。
不隶属于 StackOverflow