WCF中的共享只读数据 - 选择InstanceContextMode

时间:2016-09-26 10:29:23

标签: c# .net wcf

我有一个WCF服务需要访问只读信息库。此存储库的创建成本很高,这意味着它需要创建一次并在服务调用/服务类实例之间共享。一般来说,使类线程安全不是问题,也不是使存储库线程安全。我正在考虑共享存储库的两个选项:

  1. 只需设置" InstanceContextMode"到"单身"和" ConcurrencyMode" to" Multiple",手动创建单个服务对象,并通过构造函数将单个存储库注入其中。

  2. 使用" InstanceContextMode"设置为" PerCall" (或" PerSession")并为我的服务实现自定义服务实例提供程序。此实例提供程序可以将存储库的单个实例作为创建过程的一部分注入到所有服务类实例(构造函数)中。

  3. 根据我的情况,如果我没有提供足够的相关信息,那么在这里不使用选项1的原因是什么?这对我来说似乎是最简单的?我一直在阅读" InstanceContextMode"设置为" Single"对性能/可伸缩性有害但我不知道这是否总是如此,或者它是否取决于服务属性。

    正如已经提到的,我意识到我可能无法提供足够的有关我的具体案例的信息,以便你们能够回答。

    祝你好运, 约翰

1 个答案:

答案 0 :(得分:0)

  

需要访问只读信息存储库的WCF服务。这个存储库的创建成本很高,这意味着它需要创建一次并在服务调用/服务类实例之间共享

上述情况更可能是您必须使用缓存机制而不是必须使用“InstanceContextMode”的情况。

因此,您应该可以使用MemoryCache来实现这一目标。您可以将只读对象加载到内存缓存中,并在安全的并发Web服务调用之间共享它们。