如何在WCF服务和托管服务的进程之间共享缓存数据?

时间:2011-05-05 15:03:41

标签: wcf caching host

我有一个普通的Windows服务,它处理大型数据集并将其存储到数据库中。此Windows服务还用于托管WCF服务,该服务将处理的数据提供给一个或多个GUI。

目前,WCF服务必须至少命中一次数据库以获取客户端的数据,但数据集的大小非常慢,并且因为重复而占用大量内存。数据。理想情况下,我想直接(在内存中)与WCF服务共享数据处理的结果。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:2)

是的,使用分布式缓存引擎。

基本上,分布式缓存引擎是在一台或多台机器上运行的独立进程,用于管理缓存。这个缓存站点在它自己的进程中,通常缓存引擎提供用于访问该数据的API

主要选项是

答案 1 :(得分:1)

实际上,我的一位同事发现可以通过静态方法从主机访问WCF服务,甚至不需要以单件模式提供服务。

 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class MyWcfService : IMyWcfService
{
    private static string messageFromHost;

    public static void PassMessageFromHostToService(string message)
    {
        messageFromHost = message;
    }
// Other methods fulfilling the service contract here...
}

然后,您可以从主持人进程调用方法:

MyWcfService.PassMessageFromHostToService("I'm a message from your host");

我不确定这是否被视为不良做法,或者是否会导致我们未考虑的任何问题,但它似乎对我有效:)

答案 2 :(得分:0)

是。您需要在singleton mode中创建WCF主机。请参阅此related question