如何在COM +应用程序池实例之间共享属性?

时间:2014-04-03 16:40:28

标签: c# application-pool com+ servicedcomponent

我有一个用C#编写的COM +应用程序(ServicedComponent。)应用程序池大小>在所有情况下都是1。我正在使用SharedPropertyGroups来保留和共享数据。从我的测试来看,不清楚应用程序的所有正在运行的实例是否共享相同的值。

存储在SharedPropertyGroup中的属性是否在同一COM +应用程序的所有实例之间共享?

1 个答案:

答案 0 :(得分:1)

每个应用程序池(DLLHost进程)都将获得它自己的共享属性管理器。来自COM+ Shared Property Manager Concepts

"存储在SPM中的共享属性仅适用于在同一进程中运行的对象。"

因此,共享属性管理器将允许您在一个应用程序(池实例)内共享瞬态。

如果要在多个进程之间共享状态,那么您可能希望查看进程外缓存方法(例如Windows Server AppFabric Caching或数据库,具体取决于要求)。

另请参阅.NET Enterprise Services and COM+ 1.5 Architecture,其中介绍了使用应用程序池时的一些问题:

  

共享属性管理器(SPM)使用的内存是特定于进程的。   应用程序池可能会影响任何假设它的应用程序   在该计算机上使用SPM的唯一实例。已经没有了   任何常见的最高级数据存储(因为组件可以跨越   使用应用程序的COM +组件的所有实例的进程)   池。或者,您可以使用缓存的中间层数据库   存储不仅会跨进程中的实例而且会跨越实例的公共状态   过程也是如此。这样做时,您可能需要考虑使用   池化组件,用于保持与数据库的持久连接   专门用于中间层序列化操作。事实上,   即使没有应用程序池,这是一个更好的选择   关于锁定和SPM性能的问题。

相关问题