.NET Remoting Callback

本文探讨了.NET Remoting中实现客户端回调时遇到的主要障碍,并提供了详细的解决方案,包括利用AppDomain的AssemblyResolve事件处理assembly查找逻辑、调整TypeFilterLevel设置以及通过MarshalByRefObject实现真正的客户端回调。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有三个主要的障碍:
1、服务器解析不到客户端的assembly,因为callback的代码在客户端的assembly中
2、TypeFilterLevel默认不是Full
3、普通callback代码不能访问客户端的变量,因为不是serializable的

解决办法:
1、利用AppDomain的AssemblyResolve事件,让自己来处理assembly的查找逻辑。并且让客户端在开始的时候把自己的assembly位置发给服务器。
2、

BinaryServerFormatterSinkProvider serverFormatter = new BinaryServerFormatterSinkProvider();
serverFormatter.TypeFilterLevel = TypeFilterLevel.Full;
Hashtable properties = new Hashtable();
properties.Add("portName", "thoughtworks");
IpcChannel channel = new IpcChannel(properties, null, serverFormatter);

3、把callback放在MarshalByRefObject之中。并且让客户端注册自己的channel。这样服务器就会真的callback了,callback代码也是执行在客户端中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值