- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我对 .NET Remoting 中的 [Serializable] 和 :MarshalByRefObject 属性感到很困惑。但是我读了很多关于它的文章。如果我使用 [Serializable] 属性,那么所有方法都完全在调用者域中执行,这意味着不同的调用者应该在他们自己的域中拥有不同方法的副本,并且一个调用者所做的任何更改都不应该反射(reflect)在其他人身上。但是当相同的时候我在我的程序中实现的事情,我没有得到想要的结果。
最佳答案
Serializable
属性用于标记一个对象,当它通过远程处理请求时,它将被序列化为字节数组,作为字节数组从源传输到目标,然后对象的另一个实例是从在目标环境(AppDomain 或应用程序)中生存和呼吸的字节数组重建。对该对象执行的操作不会反射(reflect)到源中。要更新对象,您必须再次访问源并发送更改的对象(当然是作为新的字节数组)。这就像下载文件并修改它一样,您的更改不会反射(reflect)到您下载文件的服务器上。
var user = server.GetUser("edokan");
user.Alias = "edokan2";
var user2 = server.GetUser("edokan");
//user.Alias == user2.Alias; // is false
另一方面,MarshalByRefObject
标记您的对象,而不是您的对象的数据,对您的对象的引用是通过远程处理传递的,并且每个方法调用/每个属性操作都在服务器端执行。这就像将您的问题发布到 StackOverflow 并阅读答案一样,您只有一个浏览器和一个 url 来查看/处理问题。一切都在 StackOverflow 服务器上执行。
您的困惑源于一个非常简单的观点,MS 使远程处理变得如此简单,实际上人们认为一切都在客户端。
关于c# - Serializable 和 MarshalByRefObject 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19315786/
我用 C# 编写了一个非常基本的 Web 服务器,它加载自定义模块来处理对配置文件中指定的特定域名的请求。自定义模块被加载到新的 AppDomain 中,因为我需要能够动态卸载它们(也有利于安全性)。
.NET 有一种称为远程处理的功能,您可以在不同的应用程序域甚至物理机之间传递对象。我不完全理解魔法是如何完成的,因此提出了这个问题。 在远程处理中,有两种传递对象的基本方法 - 要么可以序列化它们(
我有一个 .net WinForms 应用程序,它可以将插件 (dll) 加载到它们自己的 AppDomain 中,每个 dll 使用 domain.CreateInstanceAndUnwrap()
我一直在绞尽脑汁想弄清楚一些事情。所以,我正在寻找建议和研究 Material (通过链接)。场景如下: 我们有一个库(例如,CommonLib),其中包含其他几个应用程序(例如,AppA、AppB、
MarshalByRefObject 的用途是什么? 最佳答案 远程处理;这意味着在 AppDomain 或机器之间,不是序列化和传输对象,对象停留在一端,而代理在另一端创建。对代理的所有方法调用都被
在 AppDomain A 中,我有一个类型为 T 的对象 o。 T 既不是 Serializable 也不是从 MarshalByRefObject 派生的。 T 类型由我无法控制的插件主机提供。
我目前正在修改一个插件架构,以便它利用 AppDomains。我的插件与我在网上找到的许多示例之间的主要区别在于,我的主应用程序不是运行插件并将其结果发送回主应用程序,而是向插件发送信息的应用程序。
我在两个 .NET 应用程序域之间传递一些数据时遇到了一些问题,我希望这里有人可以帮助我。 基本上我拥有的是一个主应用程序 (Main),它将程序集 A 和 B 加载到它的主域中,然后当我运行插件(C
在 VS2010 C# 项目中,我们有一个从 MarshalByRefObject 派生的类,我们使用 Activator.GetObject 来设置它。我们正在使用这个派生类通过网络与一台机器对话。
我有一个案例,我必须跨 AppDomains 使用一些类。为了使它们工作,我让它们继承自 MarshalByRefObject。这些类的一切都按预期工作。但是这些类在我们的整个系统中都在使用,而且 9
各种消息来源解释说 When an object derives form MarshalByRefObject, an object reference will be passed from on
我正在尝试将 C# 应用程序移植到 .NET(客户端服务器),但遇到了序列化问题。 Linux客户端序列化and对象,Windows服务器无法反序列化,报错: System.Runtime.Seria
是否可以确定可用于转换 MarshalByRefObject 对象的接口(interface)? 强制转换运算符如何处理 MarshalByRefObject 对象?它调用 CreateObjRef
我对 .NET Remoting 中的 [Serializable] 和 :MarshalByRefObject 属性感到很困惑。但是我读了很多关于它的文章。如果我使用 [Serializable]
我试图在 stackoverflow 上找到一个解决方案,但似乎找不到一个与我的非常相似的解决方案,所以就到这里吧。我在实验室有一台计算机连接到各种设备,如平移/倾斜装置、相机和光传感器,并安装了所有
在我的 Azure Web 角色代码中,我有一个派生自 System.Security.Principal.IIdentity 的 CustomIdentity 类。在某些时候 .NET 运行时 tr
我正在开发一个需要跨 AppDomain-intra-process 和 inter-process-intra-machine 通信的项目。是的...我知道... NET Remoting 被广泛认
我正在处理我的第一个使用 AppDomains 的项目,我想知道当一个对象从 MarshalByRefObject 派生并且也被标记为 [Serializable] 时会发生什么? 例如: [Seri
如何在像 C# 这样的多继承截断语言中解决“必须是 MarshalByRefObject”? 问题很简单,在某些情况下你只需要继承这个类(基础设施要求)。在这里真的无关紧要,哪种情况。那么,如果您已经
我知道这听起来很愚蠢,但我只是好奇。我的讲师问了这个问题,我们一头雾水。 :D 最佳答案 您的讲师不正确。 foreach(var type in typeof(Uri).Assembly.GetTy
我是一名优秀的程序员,十分优秀!