WCF InstanceContextMode.PerCall,调用之间的共享数据

时间:2014-07-14 17:22:24

标签: .net wcf windows-services singleton shared

如何在WCF服务的实例之间共享数据,在使用InstanceContextMode.PerCall时,我需要一个实例将写入和读取的共享列表?

修改

使用@usr的想法我创建了一个具有Queue的单例类,其中WCF服务将注册其消息,而在单例类中,我有一个正在运行的线程,它将消耗来自队列,生产者/消费者问题的消息。

1 个答案:

答案 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应用程序。您必须假设应用程序随时被杀死(例如电源故障,崩溃,错误......)。此外,您需要一个高可用性解决方案,通常涉及多次实例化应用程序。