私はbasicHttpBindingでServiceContractを公開するWCFサービスを持っているので、私の理解では、InstanceContextModeはPerCallに設定され(basicHttpBindingはセッションをサポートしていないため)、ConcurrenyModeはSingleに設定されます。
この WCF のクライアントは Windows サービスであり、サービス上で同時に 4 つの異なる操作を呼び出します。サービス内ではシングルトン クラスを使用しており、静的変数はほとんどありません。一部の DB ストアド プロシージャに間違った値が渡されるという問題に直面しています。
PerCall InstanceContextMode と Single 同時実行モードでは、呼び出しごとに新しいサービス インスタンスが作成されることを理解しています。そのため、サービス実装と静的変数にいくつかのシングルトン クラス (スレッド セーフにはしていません) があるにもかかわらず、オブジェクトは破棄されますが、古い値が DB に渡される SQL プロファイラーを実行していることが確認されています。
WCF サービス コードを一種の 3 層アーキテクチャ、つまり ServiceClass、BusinessLogicLayer、および DataAccessLayer で記述しました。PerCall を instanceContextMode として設定し、クライアント リクエストが終了した後にサービス インスタンスが破棄されると言いましたが、すべてを破棄するということですか? ServiceClass、BusinessLogicLayer、および DataAccessLayer のオブジェクト?
何が問題なのかを理解するのを手伝ってください