高分求:remoting事件断网处理……(顶者有分,问题解决,另开贴送分)
我在用remoting事件的时候,碰到断网的问题,异常苦恼……
首先看下面的代码:
foreach (Delegate del in BroadCastEvent.GetInvocationList())
{
try
{
tempEvent = (BroadCastEventHandler)del;
tempEvent(info);
}
catch
{
MessageBox.Show("事件订阅者" + index.ToString() + "发生错误,系统将取消事件订阅!");
BroadCastEvent -= tempEvent;
}
index++;
}
}
这个没有任何问题,在单机测试的时候,事件肯定能从广播列表中删除,现在我的问题来了:当客户端突然断网(停电,关机等),服务器端就会长期处在try环节,当一个客户端断网以后,排在他后面的客户端要很长一段时间(大概30-90秒)才能收到消息,而且当下一次消息触发的时候,在try环节同样会等待很长时间。
【重要】这说明一点:就是在上一次try的时候,并没有删除这个客户端的注册……
但是我在单机测试的时候,却没有发现类似的问题,无论怎么关闭客户端,“BroadCastEvent -= tempEvent”都能起作用,当在网络中的时候,客户端异常断开(尤其是在停电时,网络异常中断)这句就不灵了,根本没有把客户端注册的事件删除呀,异常苦恼中……
这个问题早在半年前我就发现了,但是一直解决不了……