WCF duplex service 通过这个聊天程序练习了一把, 基本通讯流程大概走通了, 这个聊天代码也就告一段落了, 谢谢,这中间给我提意见得朋友,呵呵.
演示地址: http://www.shareach.com:81/chat
碰到的问题:http://www.cnblogs.com/yinpengxiang/archive/2009/03/23/slChat.html
代码整理了一下, 在此发布出来, 后面的更新就不在WCF duplex Service的范畴之内了; 后面有时间我再把登录/注册和资料维护做进来, 还有前面提到的地图/相册等. 希望有更新或者看了我源码得朋友能给我提点意见. 欢迎大家将此代码作为技术交流, 但不要作为其它用途.
下面对solution里面各个project做一个简要说明吧:
1.服务端, 2个project
Contract 是服务端和客户端数据接口,和通讯的数据协议结构, 以及Service接口, 其实IChat可以不放在里面, 开始以为Duplex一定要用普通WCF Service得契约方式, 呵呵,懒得改了.
Service项目就是普通得WCF Service而已, 参考MSDN的 Factory代码, 我几乎是照抄得, 然后看了Webabcd得代码,把英文换成中文了.
WebSvr.aspx这个文件说一下, 是为了js实现让service马上知道退出用得,其实没多大用,呵呵.
ChatChecker: 消息的route和dispatch都是他来做的, 我还在里面用了个timer实现定时轮询客户端(这个地方总感觉有问题), 以便及时的了解客户端是否在线, 然后一个下线客户端的list, 一遍广播所有下线消息到各个客户端; 具体大家看代码吧, 呵呵.
在ChatService里面主要就是接受消息,然后异步调用ChatChecker这个类.
ChatMessage和Data:是消息发送的协议类, 我在里面封装了消息收发的协议结构:消息包结构/消息类型/聊天信息类型; 消息正文是通过json序列化方式放到消息包里面, 这样C-S双方只需要根据消息类型就可以反向出具体的消息实例了.
2.客户端, 4个project
Chat 是大家能看到的Silverlight Chat UI项目,
chat.Web silverlight的web项目,
Contract是消息协议定义
Core是公用函数, 就封装了2个正反序列化的函数
代码没有太多的整理, 特别是消息的收发, 只是为了验证WCF Duplex Service, 没有做太多的性能处理. 希望大家多多提意见.
再次声明:欢迎大家将此代码作为技术交流, 但不要作为其它用途.