WCF:跨多个服务共享缓存数据

时间:2009-04-16 19:04:57

标签: wcf

我们正在开发一个涉及10个不同WCF服务的项目,每个服务都有几个端点。其中一项服务会在内存中保留一些大数据表。

我们发现我们需要从其他服务访问该数据。我希望能够在所有服务中共享这些表,而不是保留2个缓存副本。

我做了一些研究,发现了一些关于使用附加到servicehosts的IExtension来存储共享数据的文章。

如果所有服务都在同一个网站下运行,那会有效吗?这是正确的方法吗?或者我应该在别处寻找?

2 个答案:

答案 0 :(得分:3)

如果您要缓存的数据是多个服务所需要的,那么听起来似乎是 - 从面向服务的体系结构的角度来看 - 它不属于您调用它的任何服务。

如果缓存的数据与这两种服务并不真正相关,而是两种服务都需要,那么它可能属于它自己的单独服务。您是否考虑将缓存封装在第三个服务中,并执行服务到服务调用以检索所需的数据?好处包括......

  1. 它解决了你原来的困境,避免了多次从数据库中读取整个缓存的需要;
  2. 它将缓存封装在一个位置,以便以后轻松维护/更改。
  3. 它允许您通过放置另一个服务接口来抽象缓存的实现远离其他服务。
  4. 总而言之,我认为这是最好的方法。唯一的缺点是进行服务到服务调用的额外开销,但这肯定优于从数据库中读取整个缓存。

    或者,如果缓存中的数据与调用缓存的服务的两个密切相关,即两个服务都添加/更改缓存中的数据等,则可能将两个现有服务组合到一起一项服务。

    如果我说的是有道理,那么我所使用的SOA原则是Service Autonomy

答案 1 :(得分:2)

如果您的所有服务都属于同一个应用程序,则似乎没有任何理由不能通过共享对象引用直接共享缓存。最简单的方法是通过静态字段。

如果你选择这种方法,要特别注意的一点是线程安全。如果通过两个WCF会话同时访问缓存,则必须确保两个会话不会通过同时更改缓存而相互干扰。如果缓存是只读的,那么您的需要就会减少,但您仍然可能需要同步缓存的初始化。