複数のクライアントに接続する WCF サービスがあります。サービスは次のように構成されます。
ServiceBehavior(
InstanceContextMode = InstanceContextMode.Single,
UseSynchronizationContext = false,
...
私が使用するサービスでは、OperationContext.Current.SessionId を使用してクライアントを識別します。
public void Register()
{
Debug.WriteLine(OperationContext.Current.SessionId);
}
次のシナリオを想像してください: - Client1 が Register を呼び出します - サービスが Thread1 で Register を実行します - 一定時間後に Client2 が Register を呼び出します - サービスが Thread1 でも Register を実行します (これは理論的には可能ですよね?)
OperationContext.Current が ThreadStatic であることを知っていると、2 番目の呼び出しが表示されます。
- セッション 1 は、OperationContext.Current が最初の呼び出しで既に設定されているためです。
- またはセッション 2 ..?
前もって感謝します ...