接着关闭其中一个客户端窗口,再广播消息(注意为模拟客户端异常情况,应在ClientForm_Closing方法中把第一步改进的取消订阅代码注释。否则不会发生异常。难道你真的愿意用断电来导致异常发生吗^_^),结果如图:

此时服务端报告了“事件订阅者1发生错误,系统将取消事件订阅”。注意此时另外两个客户端,还是和前面一样,只有两条广播信息。
当我们点击提示框的“确定”按钮后,广播仍然发送:

通过这样的改进后,程序更加的完善,也更加的健壮和友好!
附:
示例代码说明:
1、 Remoting事件(客户端发传真)压缩包:为第一节内容;
2、 Remoting事件(服务端广播)压缩包:为第二节、第三节内容,其中:
第二节代码包含于:
#region 客户端订阅服务端事件
#endregion
第三节代码包含于:
#region 客户端订阅客户端事件
#endregion
如果要实现第二节的程序,请注释掉第三节代码;反之亦然。示例程序默认为第二节程序。
3、 运行示例程序时,请先运行服务端程序,然后运行客户端程序。否则会抛出“基础连接已关闭”的异常。
4、 解决方案均放在Common(或ICommon)文件夹中。
5、改进后的代码放到Remoting事件(服务端广播改进)压缩包中,大家可以比较一下改进后的程序有何不同!
Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇
Microsoft .Net Remoting系列专题之二:Marshal、Disconnect与生命周期以及跟踪服务
参考资料:
1、 Ingo Rammer,《Advanced .NET Remoting》
2、 吕震宇,《利用Event松耦合远程对象与远程系统》
3、 大坏蛋,《.NET Remoting中的事件处理(.NET Framework 2.0)(一)》