求助,基于WCF的聊天室,在用户非法掉线后,不能将Disconnected事件通知到Server
这是我用WPF、WCF、WF、LINQ开发的一个简易聊天室,作为游戏大厅的Demo。
代码下载:https://files.cnblogs.com/Jax/TestWCFWPF.rar
我在WCF部分遇到了很棘手的困难。我使用的是TCPBinding+双工+回调技术:
[ServiceContract(CallbackContract = typeof(IClientCallback))]
public interface IServer
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
public class SystemChat : IServer
现在的问题是,如果由于网络问题或死机,用户离开聊天室,那么不能产生消息通知Server(不要说CLosed事件,这时Client已经脱离网络,根本无法发送这个事件)。
我在国外找到一个技术blog(http://www.rcs-solutions.com/blog/CategoryView,category,WCF.aspx),讲到这个问题,说是添加以下事件:
OperationContext.Current.Channel.Closed += ClientClosed;
然后在ClientClosed方法中进行处理。但是在我的程序中根本不会触发这个事件。因此,应该是我的契约中的某个WCF特性没有配置好导致的错误。有可能是Session没有设置的关系。
我昨晚搞到三点也没有解决。请园子的兄弟们帮我把这个Bug修好吧,或者联系我共同讨论这个问题。多谢了。