博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DDD~WCF做中间件,实现多个项目的缓存共享
阅读量:5994 次
发布时间:2019-06-20

本文共 3082 字,大约阅读时间需要 10 分钟。

事情是这样的,前台网站有些数据不希望每次都从数据库里读,所以,应该做个缓存,而引起缓存更新的入口来自网站的后台管理,而前台和后台被部署在不同的网站中,这时缓存的更新就成了问题,前台的缓存与后台的操作不能联系到一起,为了解决这个问题,我引入了WCF作为中间件,所以与数据库的操作,读,写都来自一个入口,那就是WCF,WCF用户告诉你是否从缓存取数据,所有缓存的数据也缓存在WCF中,OK,想法不错,下面来说一下具体的实现步骤。

一 首先看一下结构图:

注意看我的结构图,前台aop_cache和后台aop_cache_background项目都引用aop_cache_webservice项目,而它们没有对数据层aop_cache_data的引用,这个aop_cache_webservice是一个WCF项目,主要实现与数据层的通讯工作,当然也可以与BLL业务层通讯,这个架构主要是讲如何实现前后台共享缓存,而并非讲架构,所以重要不再架构,而在实现共享缓存。

二 WCF层实现所需要的DLL,主要是unity,cache,interception,log4net等,如图:

三 对于unity,wcf,cache的调用上,我进行了二次封装,如图:

四 看了这些,我们再来看一下,WEB层调用WCF层的代码片断:

public ActionResult Index()        {            //  通过WCF获取远程数据,不走缓存, 走config中的
using (ServiceProxy
proxy = new ServiceProxy
()) { return View(proxy.Channel.GetClassroom_Info()); } }

web层的配置文件包含了对WCF的调用

五 WCF层调用DAL层的代码,使用unity来做方法拦截与依赖注入,将cache功能注入到指定方法中

IClassroom_InfoRepository _iClassroom_InfoRepository = ServiceLocator.Instance.GetService
(); public void InsertClassroom_Info(Classroom_Info entity) { _iClassroom_InfoRepository.InsertClassroom_InfoData(entity); } public List
GetClassroom_Info() { return _iClassroom_InfoRepository.GetClassroom_InfoData(); }

六 对于WCF的配置文件,我们要重要看一下,它包含了数据库连接串的配置和unity的配置

七 DAL层的实现,由接口和实现两部分组成,接口的方法上规定了是否要进行cache操作

public interface IClassroom_InfoRepository    {        [Caching(CachingMethod.Remove, "GetClassroom_InfoData")]        void InsertClassroom_InfoData(Classroom_Info entity);        [Caching(CachingMethod.Get)]        List
GetClassroom_InfoData(); }

实现很简单,只是一个测试而以

public class Classroom_InfoRepository : TsingDa_NewLearningBarRepository
, IClassroom_InfoRepository { public void InsertClassroom_InfoData(Classroom_Info entity) { base.Insert(entity); } public List
GetClassroom_InfoData() { return base.GetModel().ToList(); } }

 本文转自博客园张占岭(仓储大叔)的博客,原文链接:DDD~WCF做中间件,,如需转载请自行联系原博主。

你可能感兴趣的文章
一段查看终端端口的asp代码
查看>>
关闭默认共享-注册表-批处理
查看>>
apache_1.3.41+mysql-4.0.26+php-4.4.8+Redhat5 linux
查看>>
在Eclipse中使用Checkstyle
查看>>
Hive查询失败:no LazyObject for VOID
查看>>
AD+EXCHANGE邮件服务器的迁移实战<一>
查看>>
后智能手机时代之我想
查看>>
ORA-00900 修改props$中字符集导致
查看>>
html5手机网站需要加的那些meta/link标签,html5 meta全解
查看>>
ERP安全
查看>>
NA-NP-IE系列实验53:帧中继环境下BMA 模式
查看>>
ORA-600数据库无法启动一例
查看>>
新注册的域名,注册商设置暂停解析怎么办?
查看>>
.NET设计模式(14):代理模式(Proxy Pattern)
查看>>
SCCM 2007系列1 安装前的准备
查看>>
ADO.NET与ORM的比较(1):ADO.NET实现CRUD
查看>>
Android 框架层为IMountService 增加新接口
查看>>
关注物理硬盘预警信息
查看>>
EntityFramework Core并发导致显式插入主键问题
查看>>
关于IE8不支持document.getElementById().innerHTML的问题
查看>>