私は WCF での状態/同時実行管理の初心者です。以下のようなサービスクラスがあるとしましょう:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class Service1 : IService1
{
private int _myCounter;
private MyType _myType;
private static MyType _myTypeStatic;
private static Dictionary<string,string> _d = new Dictionary<string,string>();
public void Method1()
{
// logic to set _myType
// logic to set _myCounter
// logic to set _myTypeStatic
// logic to set _d
}
public void Method2()
{
// logic to save _myType, set in Method1() to db
// logic to save _myCounter, set in Method1() to db
// logic to save _myTypeStatic, set in Method1() to db
// logic to save _d, set in Method1() to db
}
}
2 つのクライアント接続が同時にこのサービスを消費する場合、それらは 2 つの異なるスレッドで実行されます。サービスのインスタンスしかないため、このシナリオで 2 つのグローバル クラス レベル変数の状態はどのように変化しますか? 静的変数と型に対してどのように機能しますか? これらの 2 つのスレッドが変数データの 2 つの異なるコピーを持っている可能性はありますが、まだ 1 つのサービス インスタンスで動作していますか?