码迷,mamicode.com
首页 > Windows程序 > 详细

三十、【C#.Net开发框架】WCFHosting服务主机的利用WCF服务通讯和实现思路

时间:2014-10-24 00:03:34      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:winform   style   blog   http   color   os   ar   使用   for   

 回《【开源】EFW框架系列文章索引》       

 EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0

 EFW框架实例源代码下载:http://pan.baidu.com/s/1eQCc69G

 

       前言:以前的系统都是直接客户端直连数据库服务器,后来考虑到服务器的安全性、数据库连接数的限制、分布能力差等问题,特别是那几年中间件、SOA、ESB等炒得比较火,为了跟上时代脚本有必要开发一个中间件,把后台逻辑业务在中间件中运行。刚开始考虑过WebServices,但是需要部署在IIS中,还有性能问题都比较严重,试了一下效果不是很好,后来觉得WCF不错,但一直没有找到好的方式怎么与现有的架构结合,如果把业务代码全改写成WCF服务方式提供给客户端调用,感觉工作量很大,光看着WCF那些配置文件就头大,特别是破坏了现有程序架构,这样使用WCF对现有框架也没什么意义。后来在完善Web版框架中从HttpHandlers中找到了思路,发现没有必要把业务功能做成WCF服务,而WCF服务只是用来实现客户端与后台业务的通讯,这样中间件只需要一个WCF服务用来连接客户端控制器与服务端控制器,把Winform版控制器层也分拆成wcfclientController与wcfController。这样原来的程序结构基本没变,保证了Web版、Winform版、WCF版三种类型系统的程序架构,编码风格等都一致,让EFW框架全面支持多种系统开发;

 

本文要点:

1.WCFHosting服务主机介绍

2.WCFHosting服务主机实现

3.WCFHosting服务主机必须解决的两个问题

4.总结

 

1.WCFHosting服务主机介绍

       WCFHosting程序只是一个WCF自托管宿主,当然你可以修改此程序让WCF服务托管在IIS或Windows Services中,WCFHosting程序只有三个核心功能:WCFHandlerService服务用来实现客户端与服务端通讯,RemoteLoader用来实现访问对应的服务端控制器程序,Router服务用来实现中间件的连接路由和负载均衡。

 bubuko.com,布布扣

 

源代码项目解决方案目录:

bubuko.com,布布扣

WCFHosting程序界面

 bubuko.com,布布扣

配置文件说明,包括客户端的App.Config和服务端的App.Config两个配置文件

1)客户端的App.Config

主要是ClientType参数和WCF_endpoint参数的设置,ClientType必须设置为WCFClient,WCF_endpoint设置为WCF地址;

 bubuko.com,布布扣

2)服务端的App.Config

 bubuko.com,布布扣

2.WCFHosting服务主机实现

1)FrmHosting.cs界面,启动、停止WCF服务

       启动的时候可以根据设置里的配置开启相应功能,比如:

显示调试信息,那么每个客户端每次与服务端交互的内容都会在日志界面显示出来

开启WCF服务,如果此主机是作为系统的中间件那么必须勾上此处

开启路由服务,如果此主机设置为路由器那么必须勾上此处

开启心跳检测,正式使用的系统必须勾上次处,如果是开发阶段的时候可以不勾,便于调试程序

2)WCFHandlerService服务,客户端通过调用此wcf服务连接、执行、断开与中间件通讯

       WCFHandlerService服务的IapiWCFHandlerService契约使用了CallbackContract回调操作,这样实现了客户端与服务端之间双向通讯,服务端可以主动向客户端发送数据,这是Web程序没有的功能,Web程序只能通过定时访问来实现此功能。

WCFHandlerService服务对象有5个核心方法,

CreateDomain:打开客户端(EFWWin.exe程序)会调用此方法在服务端创建在线用户

ProcessRequest:客户端调用此方法访问服务端控制器代码

UnDomain:客户端(EFWWin.exe程序)退出前调用此方法清除服务端在线用户

Heartbeat:客户端像心跳一样,调用此方法定时向服务端发送在线状态

SendBroadcast:服务端向客户端发送消息

3)Loader对象,管理每个连接的客户端,并通过反射调用wcf控制器

4)BaseWCFClientController客户端控制器基类

5)BaseWCFController服务端控制器基类

6)JsonWCFController客户端与服务端数据交换基于Json字符串格式

7)Router服务,中间件路由功能及负载均衡实现

3.WCFHosting服务主机必须解决的两个问题

问题一:由于网络中断问题等问题引起通讯错误,再恢复之后必须可以继续使用,不需要关闭系统重新登录系统;再就是wcf服务器主机必须反馈此客户机是断开状态;

问题二:由于WCF主机异常奔溃,再重启后能重新接管以前连接到此主机的所有客户端连接;不需要客户端退出系统重新启动;

 

解决问题的办法:

问题一,增加心跳机制,让客户端定时向wcf主机发送一条消息,如果超时没有接收到就证明客户端断开了连接;网络中断客户端自动重连服务端,可以把客户端设置为取消服务器凭据认证;

问题二,必须解决中间件能够把缓存的客户端信息进行持久化,重新启动中间件又能加载非正常退出的客户端信息;

 

4.总结

       WCF中间件基本功能都已具备,实现了客户端与服务端的通讯,实现服务端分布式部署与负载均衡。但中间件还是非常简陋的,如持久化客户端连接数据、更加灵活的负载均衡算法等还有许多功能需要不断完善。中间件路由与负载均衡的实现下一章详细讲解。

三十、【C#.Net开发框架】WCFHosting服务主机的利用WCF服务通讯和实现思路

标签:winform   style   blog   http   color   os   ar   使用   for   

原文地址:http://www.cnblogs.com/kakake/p/4047143.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!