2

我想知道如何使用 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,因此两个操作都是单独的远程过程调用。他们会在单独的线程上运行吗?如果是,是否会在操作 1 完成之前执行操作 2?

PS:制作 MyRemotedClass MarshalByRef 是错误的决定。但我不能改变它,所以请不要提出这个建议。

4

2 回答 2

2

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

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

于 2009-02-08T08:49:29.693 回答
2

事实上,就我的想法而言,设置 2 个属性并不是异步发生的,因此客户端会等到第 1 个 RPC 完成后才会从 RPC 2 开始。

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

于 2009-02-08T09:24:18.250 回答