私のWCFコードでは、ユーザーのIDと名前は静的変数に格納されています。これは、HttpContext.Current.User.Identity.Nameおよびデータベースヒットから取得されます。また、接続文字列を格納するための他の静的変数等は、ファイルに関連するものを記録し、あるWCFのInstanceContextMode.PerCallはすべての静的変数/メソッドをインスタンス化しますか?
最近、私は最初の呼び出しがまだ処理されたとき、私のクライアントから2番目の呼び出しは、ユーザー名を設定する競合状態に自分自身を発見しました。これにより、第2コールによって更新された第1コール・リーディング・ユーザ・データが得られた。これを避けるために
、私はInstanceContextMode.PerCallについて読み、それは静的変数は、すべての呼び出しに対して非静的のように振る舞いますか。
私の質問は
1です)私はInstanceContextMode.PerCallを使用している場合は、それはそれはすべての静的変数やメソッドをインスタンス化します意味ですか?私はこれを使用してすべての通話に対して新しいユーザーデータを取得する予定です。しかし、私はこれが接続文字列静的変数、ログファイル、およびその他の静的変数の新しいインスタンスを作成することも想定しています。これは正しいです?それはパフォーマンスに影響しますか(web.configなどから再度読む)?
2)InstanceContextMode.PerCallを使用するが、静的変数に関連する接続文字列をのみ関連するユーザデータのための静的変数をインスタンスを作成して残すために方法はありますか?
3)呼び出しが行われた後の静的変数を離れて配置することが必須IDisposeを実装Disposeメソッド()ですか?
通常の静的変数は、AppDomainごとに1回初期化され、すべてのスレッド間で共有されます。つまり、ユーザーごとの情報を静的変数に保存することはできません(すでに分かっているように)。InstanceContextMode.PerCallは何も変更しません。 – Evk