GetList と呼ばれる 2 方向のメソッドと、1 方向のコールバック メソッド ItemUpdated を備えた WCF 二重サービスがあります。
次の状況でデッドロックを検出しました。
- サービスは、メソッド OnItemUpdated によってクライアントで処理される ItemUpdated コールバックを呼び出します。
- 前のメソッドが戻る前に、何らかのユーザー操作により、クライアントはサービスで GetList を呼び出します。
サービスの ConcurrencyMode を Reentrant に設定できましたが、それは必要ありません。GetList を呼び出す前に、クライアントがサービスからのコールバックを処理していないことを確認する必要があります。
したがって、これが起こらないことを確認するために、オブジェクトを同期させることができます。それは私のより良い選択肢ですか?
アップデート:
私の現在の設計が何であるかを明確にするために、私のサービスは実際には、スケジュールに従ってオブジェクトのリストに対して何らかの処理を行う Windows サービスであり、各アイテムが更新されると、ItemUpdated イベントが発生します。このサービスには、1 つまたは複数のコンソール (クライアント) がそのイベントをサブスクライブし、サービスで何が起こっているかを確認できる WCF サービス ファサードがあります。