WCF的背景工作进程(缓存)

时间:2010-06-22 00:32:35

标签: .net wcf web-services replication software-design

我的任务是构建一个可以弥补LDAP系统复制延迟的流程。目前,有一个写服务器和4个读服务器。在向写入服务器写入条目之后,在将条目复制到读取服务器之前,系统上最多可能有4秒的延迟。因此,如果我调用服务“A”来更新记录,然后立即点击服务“B”,这应该是读取该记录,那么数据将是陈旧的。

要解决此问题,我计划构建缓存Web服务,以便没有应用程序直接与数据库接口,而是通过缓存服务。该服务将所有创建,更新和删除存储在缓存中(可能是List<ModelObject>)。 CRUD-R条目需要保留在缓存中至少四秒钟。然后,当服务“B”尝试读取时,缓存服务将在对数据库执行读取操作之前检查缓存。

所以,我的问题是两部分。 1)这是一个可行的解决方案,如果没有,你看到了什么问题? 2)如何在WCF服务中对缓存进行维护。换句话说,是否有一种方法可以启动后台工作线程来清除4秒钟内缓存中的条目?

2 个答案:

答案 0 :(得分:1)

关于#1,我认为它是可行的,虽然生成自己的缓存层可能会有它自己的困难和陷阱。除了你将所有负载放在一个缓存服务器上之外,我无法想到任何其他东西(而不是可以处理请求负载的4个分布式LDAP服务器)。

关于#2,我建议您查看Enterprise Library Caching Application Block,我相信它具备您需要的所有必要功能,包括根据时间,持续时间等进行清理。

答案 1 :(得分:1)

  

要解决此问题,我计划构建缓存Web服务,以便没有应用程序直接与数据库接口,而是通过缓存服务。

听起来对我来说是正确的解决方案。

.NET包含几个缓存库,可以让您轻松实现。这是我的最爱:

http://www.infoq.com/news/2010/05/Runtime.Caching http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx

  

换句话说,有没有办法启动后台工作线程来清除4秒钟内缓存中的条目?

你不需要。将项目添加到缓存时,只需将expirationTime设置为(Now + 4秒)。

但实际上你不需要过期时间。如果这是更改值的唯一方法,那么它永远不会过期。