文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>remoting 中事件找不到订阅者时引发异常的解决办法

remoting 中事件找不到订阅者时引发异常的解决办法

时间:2010-10-29  来源:麻将我会

当事件不可到达,无法发送时,正常情况 下,会返回一个异常信息。如果加上OneWayAttribute,这个事件的发送就变成单向的了。假如此时发生异常,那么系统会自动抛掉该异常信息。由 于没有异常信息的返回,发送信息方会认为发送信息成功了。程序会正常运行,错误的客户端被忽略,正常的客户端依然可以收到消息;

2、检查委托链:

就是在发送信息一方时,检查了委托链。并在委托链的遍历中来捕获异常。当其中一个委托发生异常时,显示提示信息。 然后继续遍历后面的委托,这样既保证了异常信息的提示,又保证了其他订阅者正常接收消息。因此,我对本例的远程对象进行了修改,注释掉[OneWay], 修改了BroadCastInfo()方法:

//[OneWay]
        public void Send(string info)
        {
            if (MyEvent != null)
            {
                 EventHandler tempEvent = null;

                int index = 1; //记录事件订阅者委托的索引,为方便标识,从1开始。
                foreach (Delegate del in MyEvent.GetInvocationList())
                {
                    try
                    {
                         tempEvent = (EventHandler)del;
                         tempEvent(info);
                     }
                    catch
                    {                        
                         MessageBox.Show("事件订阅者" + index.ToString() + "发生错误,系统将取消事件订阅!");
                         MyEvent -= tempEvent;
                     }
                     index++;
                 }                
             }
            else
            {
                 MessageBox.Show("事件未被订阅或订阅发生错误!");
             }
         }
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载