2016-08-22 4 views
5

ローカルのService Fabricステートフルサービスを3つのパーティションと3つのレプリカを持つ で実行しています。Servieファブリックアプリケーションの静的変数スコープ

アプリケーションにはパブリック静的変数があり、値は「スタートアップ」クラスで初期化されます。

私は、静的変数のスコープがレプリカごとであると仮定していました。 しかし、静的変数スコープはノード内のすべてのインスタンス間で共有されているようです。

ie。私はパーティション1プライマリレプリカから静的変数にアクセスしていますが、両方のレプリカが同じノードにあるにあるパーティション3セカンダリレプリカからその値を与えています。 静的変数の値は、同じノード内のある順序で上書きされているようです。

ステートフルサービスファブリックアプリケーション内のスタティック変数の有効範囲は何ですか?

答えて

7

同じサービスタイプのステートレスサービスのステートフル・サービスまたはインスタンスの各レプリカは、同じプロセスで、およびであなたStatefulService-またはStatelessService派生サービスクラス(RunAsync有するもの)のインスタンスあります同じAppDomain。言い換えると、同じノードに配置されたサービスのすべてのレプリカは、同じプロセス内の.NETオブジェクトの束に過ぎません。だから、静的変数がそれらの変数に見えます。静的変数は推奨されません。何かの「ただ一つ」が必要な場合は、シングルトンパターンとスコープシングルトンインスタンスを使用してレプリカ/インスタンスを処理します。ルックアップテーブルを使用して自分自身で行う必要があります。