我们正在开发一个涉及10个不同WCF服务的项目,每个服务都有几个端点。其中一项服务会在内存中保留一些大数据表。
我们发现我们需要从其他服务访问该数据。我希望能够在所有服务中共享这些表,而不是保留2个缓存副本。
我做了一些研究,发现了一些关于使用附加到servicehosts的IExtension来存储共享数据的文章。
如果所有服务都在同一个网站下运行,那会有效吗?这是正确的方法吗?或者我应该在别处寻找?
答案 0 :(得分:3)
如果您要缓存的数据是多个服务所需要的,那么听起来似乎是 - 从面向服务的体系结构的角度来看 - 它不属于您调用它的任何服务。
如果缓存的数据与这两种服务并不真正相关,而是两种服务都需要,那么它可能属于它自己的单独服务。您是否考虑将缓存封装在第三个服务中,并执行服务到服务调用以检索所需的数据?好处包括......
总而言之,我认为这是最好的方法。唯一的缺点是进行服务到服务调用的额外开销,但这肯定优于从数据库中读取整个缓存。
或者,如果缓存中的数据与调用缓存的服务的两个密切相关,即两个服务都添加/更改缓存中的数据等,则可能将两个现有服务组合到一起一项服务。
如果我说的是有道理,那么我所使用的SOA原则是Service Autonomy。
答案 1 :(得分:2)
如果您的所有服务都属于同一个应用程序,则似乎没有任何理由不能通过共享对象引用直接共享缓存。最简单的方法是通过静态字段。
如果你选择这种方法,要特别注意的一点是线程安全。如果通过两个WCF会话同时访问缓存,则必须确保两个会话不会通过同时更改缓存而相互干扰。如果缓存是只读的,那么您的需要就会减少,但您仍然可能需要同步缓存的初始化。