前断时间的一个项目中需要实时提醒待办事项,而客户又不想花钱买MAS 机(电信服务商提供的企业短信接口)。所以我们打算将OA中的待办事项通过桌面客户端来进行提醒,但是客户端如果采用定时刷新的方式直接在OA系统中进行查询的话,服务器压力可想而知。于是想到了由服务器将待办任务推送到客户端。
客户端和待办服务之间的关系大概这样的:
其中,每个应用中都会有提供一个接口,该接口返回当前应用中所有待办任务。TodoServer每时间段获所有应用的待办,并将获取到的信息分别分发给当前已经登录到TodoServer的客户端。
客户端使用的是WPF,待办任务是Wcf,其宿主可以是IIS,也可以是一个窗体,也可以是一个Windows服务。我们使用的是Windows服务,因为服务器是2003 server ,IIS6.0还并不支持net.tcp绑定。各个应用使用到的语言不一样。
在本文中我们主要是了解下如何使用WCF进实现服务器推送:
一、首先我们新建一个解决方案,添加以下几个项目:
Todo
TodoServer --wcf 服务库
TodoClient --wpf应用程序
WebApp --web应用程序
二、在使WebApp能返回一个新的信息, 因为不是重点所以基本略过:
三、TodoServer
1、 定义服务接口该接口包含了客户端上线,下线功能,实际项目中,还需要传一些参数。需要注意的是,该接口的标记和默认的多了(CallbackContract = typeof(ITodoServiceCallback))。
来看看这个回调契约是什么
2、TodoServiceCallback 类实现 ITodoServiceCallback接口
3、修改App.config 下的system.serviceModel节点
紫色框中为添加,黄色为修改
注意:在添加的地址中,必须使用一个新的端口地址(防火墙需要打开该端口)
运行WCF服务库看到这个界面就表示已经搞定服务(错误信息请无视)
三、待办客户端实现
1、添加服务引用
2、实现服务契约的回调接口、添加上线功能
四:最后来运行看下效果
在网站中发送内容后,客户端就会收到 该消息的推送。因为在此案例中WCF服务并没有宿主应用,所以在调试时,需要将WCF的测试客户端打开。
最后来看下项目目录
文章中若有不正确之处,还请指教,谢谢。
源代码下载 http://download.csdn.net/detail/fengchun_doff/7538865