Wcf通讯基础框架方案解决方案说明以及源代码

源代码见 http://wcfextension.codeplex.com/

注意:

1) 本来没打算这么早开源,这只是一个比较原始的实现,请勿直接在商业环境使用

2) 请注意本框架的授权条款Apache License 2.0

3) 本框架依赖的外部程序集或框架版权归原作者所有

4) 框架之后可能会增加很多功能,请关注项目主页即使获得最新信息

解压缩代码打开sln文件后可以看到这样的结构

image

1) WcfExtension就是核心框架:

image

Client文件夹放的是客户端用到的一些代码,Server自然是服务端用到的一些代码

Log是日志相关的一些代码(四种日志),Config是配置相关的代码

Setting是框架本身设置的一些代码(比如配置是否要记录日志)

其它代码放在父文件夹内,当然这里还放了一些用于发布nuget包的文件

至于nuget不想多介绍了(release方式编译项目后会在ReleasePackages生成nupkg包)

2) WcfExtension.ConfigCenter就是配置服务和配置的后台,配置文件中需要配置

A)redis的地址以及通知通道名

B)sql server配置数据库的连接字符串

C)配置服务的wcf服务端配置

这里需要注意几点:

A)如果你的配置不希望保存在sql server中,可以重写WcfConfigService.cs

B)现在的后台非常简易,就是一个WFWcfConfig.aspx,完全可以重写

3) WcfExtension.LogCenter就是日志服务和日志的查看后台,需要配置的东西和2)差不多,只不过注意要使用不同的端口

WcfLogService.cs同样是一个简单的实现,仅供参考,现在实现过程如下:

A)保存到内存队列

B)几个线程定时批量把数据保存到mongodb中

有关ConfigCenter和LogCenter还需要注意,在生产环境中为了高可用性可以使用IIS来承载tcp的wcf服务,做负载均衡。

但是为了测试简单,在解决方案中有两个临时的Console应用程序,用于替代ConfigCenter和LogCenter。

4) WcfExtension.Clients.Console是测试的控制台客户端,应该只依赖WcfExtension框架和服务契约也就是WcfExtension.Services.Interface

5) WcfExtension.Hosts.Console是测试的控制台服务端,需要依赖服务接口和服务实现,以及WcfExtension框架

6) WcfExtension.Services.Interface是服务契约,定义了一些简单的测试方法

7) WcfExtension.Services.Implementation是服务实现,其下的LogService是用来测试服务依赖注入的

8) Libs目录下是一些依赖的程序集,主要是redis的客户端、mongodb的客户端以及unity、log4get、nuget。

因为,可以这么启动项目进行测试:

image

先启动配置服务和日志服务,然后启动服务端,最后启动客户端。

在运行起来之前,还需要建立表结构和模拟数据(如果怕麻烦可以直接回复包里面的WcfConfig.bak数据库文件),运行WcfExtension.ConfigCenter中的db.sql来建立数据表。

可以直接打开表配置数据也可以使用配置后台,首先建立一个绑定Binding:

image

然后建立一个服务端点ServiceEndpoint,对应这个绑定:

image

然后建立一个服务Service:

image

然后建立服务的集群ServerFarm:

image

最后是客户端的端点ClientEndpoint:

image

和客户端访问集群的权限ClientAccess:

image

启动四个项目后可以看到:

image

1) 日志服务控制台上出现了各种日志

2) 客户端和服务端都显示出了发送和接受的消息

3) 如果在后台修改配置,并且点击通知按钮,客户端和服务端应该会收到修改通知,然后删除相应的缓存或重启服务使得配置立即生效

(其实在生产环境中,不太可能通知服务端重启服务)

该说的前面几次都说了,代码并不复杂,看代码就都可以理解了。

作者:lovecindywang
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
摘要: 源代码见 http://wcfextension.codeplex.com/注意:1) 本来没打算这么早开源,这只是一个比较原始的实现,请勿直接在商业环境使用2) 请注意本框架的授权条款Apache License 2.03) 本框架依赖的外部程序集或框架版权归原作者所有4) 框架之后可能会增加很多功能,请关注项目主页即使获得最新信息解压缩代码打开sln文件后可以看到这样的结构1) WcfExtension就是核心框架:Client文件夹放的是客户端用到的一些代码,Server自然是服务端用到的一些代码Log是日志相关的一些代码(四种日志),Config是配置相关的代码Setting是框架本身阅读全文
posted @ 2011-05-10 15:33 lovecindywang 阅读(806) | 评论 (27) 编辑
摘要: 以前写过一个MVC执行流程的分析的文章:http://www.cnblogs.com/lovecindywang/archive/2010/12/02/1894740.html使用一些自定义的代码埋点方式来解析MVC框架颞部的执行过程。今天看到一个老外写了一篇不错的Wcf文章,我整理了一下它的代码,为每一个方法加上了MSDN中标注的中文注释,大家可以通过这个例子来学习Wcf的扩展以及了解Wcf框架内部的执行流程:完整的代码点击这里下载。下图可以看到代码执行结果的控制台截图(点击查看大图):注意:1) 蓝色的代表服务端的执行逻辑,黄色的代表客户端的执行逻辑2) 执行了三次方法,第一次普通的请求返阅读全文
posted @ 2011-05-09 14:50 lovecindywang 阅读(922) | 评论 (4) 编辑
摘要: 对于负载均衡环境,多服务器内存中缓存数据的话,需要解决的一个很重要的问题就是一旦数据库中数据有更新,怎么让缓存的数据立即更新?如果可以容忍延迟或是差异性的话,可以考虑缓存的数据有一个过期时间。但是,最好的方式还是采用通知方式,或者说发布订阅方式。所有的客户端会订阅客户端配置修改的消息,所有的服务端会订阅服务端配置修改的消息,配置后台在修改后复杂发布这个消息。在这里采用redis作为发布订阅的服务端,利用TCP双工特性与所有客户端和服务端保持长连接,进行消息的推送。 string contract = ""; using (WcfConfigDataContext data 阅读全文
posted @ 2011-04-28 17:31 lovecindywang 阅读(1392) | 评论 (14) 编辑
摘要: 在第一篇文章中已经列出了几种日志的概览:所有的日志都有一个最终基类,来看看这个类:[DataContract(Namespace = "WcfExtension")] [KnownType(typeof(WcfExceptionInfo))] [KnownType(typeof(ServerExceptionInfo))] [KnownType(typeof(ClientExceptionInfo))] [KnownType(typeof(WcfInvokeInfo))] [KnownType(typeof(ServerInvokeInfo))] [KnownType(ty阅读全文
posted @ 2011-04-28 15:01 lovecindywang 阅读(1051) | 评论 (5) 编辑
摘要: 从这次开始在几个方面简单阐述一下实现,集中配置是这个框架很大的一个目的,首先在数据库中会有这么一些表:其实可以看到这些表的结构,应该是和<system.serviceModel>配置节点中的层次有对应的1) Service表描述的是服务,主要保存服务行为以及服务的配置。在这里,ServiceConfig是框架内用到的配置,比如各种日志是否要记录等等。服务对应到服务的集群,集群公开一个地址,客户端访问这个地址,也就是一个负载均衡的虚拟IP地址。2) 一个Service可以有多个ServiceEndpoint,ServiceEndpoint中定义了契约的版本,类型和行为,以及涉及到地址阅读全文
posted @ 2011-04-28 12:38 lovecindywang 阅读(1163) | 评论 (11) 编辑
摘要: 由于希望使用Wcf作为公司内的通讯框架,因此基于Wcf进行了一些扩展,主要的目的有以下几个方面: 1) 希望减少客户端调用的复杂度,调用方式简化为WcfServiceLocator.Create<IT...阅读全文
posted @ 2011-04-25 13:59 lovecindywang 阅读(2155) | 评论 (18) 编辑
原文地址:https://www.cnblogs.com/Leo_wl/p/2042667.html