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

本文关键字:选择 InstanceContextMode 数据 只读 WCF 共享 | 更新日期: 2023-09-27 18:08:44

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

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

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

鉴于我的情况,不使用选项1的原因是什么(前提是我已经提交了足够的信息)?对我来说,这似乎是最简单的?我一直在阅读"InstanceContextMode"设置为"Single"对性能/可伸缩性不利,但我无法掌握是否总是如此,或者是否取决于服务属性。

正如已经提到的,我意识到我可能没有提供足够的关于我的具体案例的信息,以至于你们中的任何一个人都无法回答。

最诚挚的问候,约翰

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

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

上面的场景更可能是你必须使用缓存机制的情况,而不是你必须使用"InstanceContextMode"的情况。

所以你应该能够通过使用MemoryCache来实现这一点。你可以将只读对象加载到内存缓存中,并在并发web服务调用之间安全地共享它们。