.NET远程处理线程模型

.NET远程处理线程模型,.net,multithreading,remoting,marshalbyrefobject,.net,Multithreading,Remoting,Marshalbyrefobject,我想知道如何使用MarshalByRef对象在服务器端处理线程 给定我的远程MarshalByRef类: public class MyRemotedClass : MarshalByRef { public int MyInt; public string MyString; } 客户端代码(单线程): 在服务器端,我们有两个写操作。我假设线程来自线程池。但是,由于该类是MarshalByRef,因此两个操作都是单独的远程过程调用。它们将在单独的线程上运行吗?如果是,是否会在操作1完

我想知道如何使用MarshalByRef对象在服务器端处理线程

给定我的远程MarshalByRef类:

public class MyRemotedClass : MarshalByRef
{
  public int MyInt;
  public string MyString;
}
客户端代码(单线程):

在服务器端,我们有两个写操作。我假设线程来自线程池。但是,由于该类是MarshalByRef,因此两个操作都是单独的远程过程调用。它们将在单独的线程上运行吗?如果是,是否会在操作1完成之前执行操作2


PS:做出MyRemotedClass MarshallByRef是一个错误的决定。但是我不允许更改它,所以请不要建议这样做。

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


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

事实上,就我所想,设置这2个属性并不是异步进行的,因此客户端要等到第一个RPC完成后才开始使用RPC 2


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

如果它是MarshalByRefObject,我认为它不会创建新实例。MBRO的全部要点(据我所知)是,只有一个引用被封送,对象本身“存在”在server.seconded上,因此远程处理生命周期服务/租约。
MyRemotedClass m = GetSomehowMyRemotedClass(); 
m.MyInt = 5; // Write operation 1
m.MyString = "Hello World"; // Write operation 2