在我的 Azure Web 角色代码中,我有一个CustomIdentity
类派生自System.Security.Principal.IIdentity
。在某些时候 .NET 运行时尝试序列化该类 and 序列化不起作用。试图解决我搜索了很多并发现这个答案并试图继承我的班级MarshalByRefObject.
现在一旦我的CustomIdentity
类继承自MarshalByRefObject
不再有序列化尝试,我的代码可以工作。不过我想知道使用的性能影响MarshalByRefObject
class.
我的代码是这样运行的。首先,请求到达 IIS,并传递给创建实例的身份验证代码CustomIdentity
并将该实例附加到 HTTP 上下文。然后一段时间后,相同的 HTTP 上下文被传递到访问该上下文的 ASP.NET 处理程序CustomIdentity
最多实例一次。这CustomIdentity
对象在请求期间存在,然后被销毁。
现在通过序列化我的CustomIdentity
将被序列化为流,然后从该流反序列化为新对象。和MarshalByRefObject
没有序列化,但创建了一个代理,并且访问将通过 RPC 编组到实际对象所在的位置。
使用的话要多贵MarshalByRefObject
在这种情况下?哪个 -MarshalByRefObject
或者序列化——成本会更高吗?
MarshalByRefObject
意味着所有calls(方法、属性等)通过网络进行代理。这可能意味着不是传输数据once然后在传输的数据上本地运行多个方法等,您正在进行网络调用每次访问。例如,某个角色测试了多少次(每个请求)?或查询的名称?老实说我不知道,但我猜它超过 1(全部总计)。再加上原来的设置成本......
带宽可能不会很大,但延迟会很大is very很重要,特别是如果您有分布式节点(因为您提到了云场景)。
就我个人而言,我会避免MarshalByRefObject
就像瘟疫一样,但取决于你......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)