2016-08-22 56 views
5

我在本地 中运行我的服务结构有状态服务,带有3个分区和3个副本。Servie Fabric应用程序中的静态变量范围

该应用程序有一个公共静态变量,该值在'startup'类中初始化。

我假设静态变量的范围是每个副本。 但似乎静态变量范围在节点中的所有实例之间共享。

即。我正在访问分区1主副本的静态变量,但是它从分区3次副本获得值,其中两个副本都驻留在相同节点中。 静态变量的值似乎在同一节点内以某种顺序被覆盖。

有状态服务结构应用程序中的静态变量的范围是什么?

回答

7

无状态服务相同的服务类型的的有状态服务或实例的每个副本是实例化您StatefulService-或在相同的工艺和在StatelessService衍生服务类(具有RunAsync)相同的AppDomain。换句话说,放置在同一个节点上的所有服务副本都是同一个进程中的一堆.NET对象。所以是的,一个静态变量会在他们身上看到。不建议使用静态变量。如果你需要“只有一个”的东西,使用单例模式,并将单例实例作用于服务副本/实例,你必须使用查找表来完成。