如何在WCF服务的实例之间共享数据,在使用InstanceContextMode.PerCall时,我需要一个实例将写入和读取的共享列表?
修改
使用@usr的想法我创建了一个具有Queue的单例类,其中WCF服务将注册其消息,而在单例类中,我有一个正在运行的线程,它将消耗来自队列,生产者/消费者问题的消息。
答案 0 :(得分:1)
将您的共享数据保存在与服务类不同的类中,并使您的服务类成为无状态。无状态服务可以获取单例实例并使用它。
这是草图:
class MySingleton {
//You can use any lazy initialization logic you like
//I just used a static initializer as an example
public static readonly MySingleton Instance = new ...();
//Move all static data into this class
//Use it from anywhere you like
}
class MyWcfService {
//This WCF service has no state
//Any instancing mode will do
public void SomeServiceMethod() {
MySingleton.Instance.DoSomething();
}
}
这与此问题无关:应避免使用有状态的Web服务和Web应用程序。您必须假设应用程序随时被杀死(例如电源故障,崩溃,错误......)。此外,您需要一个高可用性解决方案,通常涉及多次实例化应用程序。