求助,基于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修好吧,或者联系我共同讨论这个问题。多谢了。

 

 

posted @ 2009-02-11 11:53  包建强  Views(5889)  Comments(44Edit  收藏  举报