学习silverlight+WCF duplex的时候做了一个聊天室,顺便加了点小功能
地址:http://202.102.72.40:88/Comments/Chat
欢迎大家来测试
说说过程中遇到过的问题吧:
1.最常见的通道出错问题
常见原因:任何异常如果没有处理都会导致通道出错情况的发生,导致服务端和客户端的通道断开
解决方案:处理所有能够发现的异常,并在通道异常发生之后重新发起会话
2.超时问题
实际场景中,通讯并不会无时无刻的发生,通讯就会遇到各种超时问题,WCF的出错提示并不详细,经过实践发现,最常发生的是这4种超时:ReceiveTimeOut,SendTimeOut,OpenTimeOut, InactivityTimeout
解决方案:建立PollingDuplexHttpBinding的时候调大各个超时时限;客户端有服务端的超时时限要保持一致,避免通道出错;发送心跳讯息或者修改IIS进程池的超时时限
3.广播以及非正常下线问题
用户发送广播,比如当前用户的登录如果想立即通知其他用户;非正常下线要及时向所有用户广播
客户端建立并打开信道的时候再服务端将信道保存起来,广播的时候再取出来;
广播发生异常的时候将此信道从存储区域移除,加入信道关闭处理事件,及时发出广播
4.UI更新异常问题
原因是Duplex全是异步处理,没有对UI主线程的操作权
解决方案:跟winform类似,取得UI主线程然后提交处理方法,比如:this.dispatcher.BeginInvoke