AgileEAS.NETSOA中间件Socket/Tcp框架是一套Socket通信的消息中间件:
下面我将为大家介绍这个案例的关键代码及阅读、理解、修改完善所需要注意的地方。
本案例的源代码在下载压缩包的Code目录之中,所有的引用AgileEAS.NETSOA中间件平台的程序集及客户端、服务端运行所必须的文件都在下载压缩包的Publish目录之中,所有项目的编译输出路径也都是在Publish目录,也就是所有项目不管是在Debug编译环境还是在Release编译环境都是输出在Publish目录之中,有关具体的设置请看下图:
ChatRoom解决方案之是共有ChatRoom.Entities、ChatRoom.BLL.Contracts、ChatRoom.BLL.Host、ChatRoom.Messages、ChatRoom.Socket、ChatingRoom.MainClient、ChatingRoom.UserManage共七个项目,其中:
ChatRoom.Entities:是聊天室注册用启的数据存储实体,其中只包括一个实体User,即注册用户信息。
ChatRoom.BLL.Host:为ChatRoom.BLL.Contracts所定义的服务契约的功能实现。
ChatRoom.Socket:为服务端的业务代码、包括AgileEAS.NETSOA服务进程的SocketService插件以及服务端收到客户端各种消息的消息处理器代码。
ChatingRoom.MainClient:为客户端代码、包括客户段界面以及客户端收到通信消息的消息处理器代码。
关于这个问题就涉及到了AgileEAS.NETSOA中间件平台的SOA服务实例及Socket框架的设计,在SOA服务实例本身被设计成为了一个可以运行WCF、WS、Socket等各吃点通信及其他应用服务的运行容器,那么我们的Socket服务端也可以在此服务实例之中运行,同时在我们的AgileEAS.NETSOA中间件平台的微内核程序集EAS.MicroKernel.dll之中定义了SocketService插件的实现标准:
ChatRoom.Socket项目之中包括了一个ISocketService的实现ChatRoom.Socket.MessageService
1:socketServer.AddHander(newChatMessageHandler());2:socketServer.AddHander(newLoginMessageHandler());Socket插件服务的定义除了代码定义之外,还需要在AgileEAS.NETSOA中间件有SOA服务实例配置文件之中进行定义,因为SOA服务实例程序有32位和64位版本,分别为EAS.SOA.Server.exe和EAS.SOA.Server.x64.exe,所以要根据自身的机器条件和自己喜欢的运行环境修改EAS.SOA.Server.exe.config或EAS.SOA.Server.x64.exe.config:
1:
注册用户表结构如下:
表名
CHAT_USER
所有者
dbo
列名
数据类型
空
说明
LOGINID
NVARCHAR(64)
N
Name
Y
用户名
PASSWORD
密码
VARCHAR(128)
邮件
SafeKey
密码找回问题
SafeResult
密码找回答案
STATE
BIT
状态
REGTIME
DATETIME
有关针对CHAT_USER表的数据访问使用了AgileEAS.NETSOA中间件平台的ORM及与之配套的Linq进行访问,其对应的ORM实体对象为ChatRoom.Entities.User:
当服务端接收到客户端发来的聊天消息之后,如何转发呢,请参见下图:
关于这一部分的代码请参考ChatRoom.Socket项目之中的聊天消息处理器ChatMessageHandler之中::
1:usingEAS.Sockets;2:usingEAS.Sockets.Messages;3:usingChatRoom.Messages;4:usingSystem;5:usingSystem.Collections.Generic;6:usingSystem.Linq;7:usingSystem.Text;8:9:namespaceChatRoom.Socket10:{11:///
因为AgileEAS.NETSOA中间件平台Socket通信框架何用的是异步消息处理模式,所以当客户端收到服务器发回的消息的时候其工作线程与界面UI线呢不一致,那么UI界面处理的时候我们就需要异步处理,比如在显示收到的ChatMessage的时候:
AgileEAS.NET平台自2004年秋呱呱落地一来,我就一直在逐步完善和改进,也被应用于保险、医疗、电子商务、房地产、铁路、教育等多个应用,但一直都是以我个人在推广,2010年因为我辞职休息,我就想到把AgileEAS.NET推向市场,让更多的人使用。
我的技术团队成员都是合作多年的老朋友,因为这个平台是免费的,所以也没有什么收入,都是由程序员的那种理想与信念坚持,在此我感谢一起奋斗的朋友。