2011-05-05 30 views
0

我有一个普通的Windows服务,处理大型数据集并将其存储到数据库。这个Windows服务还用于托管一个WCF服务,该服务将处理的数据提供给一个或多个GUI。如何在WCF服务和托管服务的进程之间共享缓存的数据?

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

回答

0

是的。您需要在singleton mode中创建您的WCF主机。看到这个related question

+0

但请注意:以单例模式运行要么需要你编写大量的多线程安全代码(不容易!),或者你基本上需要序列化您的请求,在任何给定的时间只处理一个 - 都是**不是非常好的选择,真的...... – 2011-05-05 15:45:36

+0

是的,虽然它不能很好地扩展,但我认为这是一个临时解决方案。缓存可能是更好的长期解决方案。 – Franchesca 2011-05-05 16:27:10

1

其实,我的一个同事发现有可能通过静态方法从主机访问WCF服务,而且你甚至不需要拥有se单身模式下的服务。

[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"); 

我不知道,如果这被认为是不好的做法,或是否会引起任何问题,我们的天堂”但是它似乎在为我工作:)