2016-08-22 85 views
5

我在本地 中運行我的服務結構有狀態服務,帶有3個分區和3個副本。Servie Fabric應用程序中的靜態變量範圍

該應用程序有一個公共靜態變量,該值在'startup'類中初始化。

我假設靜態變量的範圍是每個副本。 但似乎靜態變量範圍在節點中的所有實例之間共享。

即。我正在訪問分區1主副本的靜態變量,但是它從分區3次副本獲得值,其中兩個副本都駐留在相同節點中。 靜態變量的值似乎在同一節點內以某種順序被覆蓋。

有狀態服務結構應用程序中的靜態變量的範圍是什麼?

回答

7

無狀態服務相同的服務類型的的有狀態服務或實例的每個副本是實例化您StatefulService-或在相同的工藝和在StatelessService衍生服務類(具有RunAsync)相同的AppDomain。換句話說,放置在同一個節點上的所有服務副本都是同一個進程中的一堆.NET對象。所以是的,一個靜態變量會在他們身上看到。不建議使用靜態變量。如果你需要「只有一個」的東西,使用單例模式,並將單例實例作用於服務副本/實例,你必須使用查找表來完成。