私は、WCF を使用してサーバーとクライアントの間で通信するアプリケーションに取り組んでいます。サーバーには、クライアントが他のサービスに関する情報を照会し、マスター サービスからの情報を使用して必要なサービスをサブスクライブできる 1 つのマスター サービスと共に、サービスの数が変化しています。 .
マスター サービスは、サブサービスが変更 (追加、削除など) されると、サブスクライブしているクライアントに通知を送信します。また、サブサービスは数秒ごとに通知を送信します。
これは、WCF のコールバック チャネルを使用する絶好の機会のように思えますが、セッションを使用する必要があります。また、クライアントに通知を送信するときに、いずれかのクライアントが不当に切断された場合、サービスが停止し、通知しようとします。タイムアウトしたとしても、しばらくすると他のクライアントには通知されず、クライアントは実際にはサブサービスの背後にあるアプリケーションを監視するための GUI であるため、これは受け入れられません。また、送信操作が成功しなかった場合、サービスはすぐに知る必要があるため、MSMQ を使用することはオプションではありません。
私が思いついた解決策は、http バインディングを使用して (送信が失敗したときにすぐにわかるようにするため)、クライアントで明示的なコールバック サービスを作成することですが、それには見栄えの悪いインフラストラクチャ コードをたくさん書く必要があります。
だから、私の質問は次のとおりです。WCFでこれを行うより良い方法はありますか。最も見栄えの良いオプションは Callback Contracts でした。これにより、次のクライアントに送信する前に 1 つのクライアントからの ack を待つことができなければ、コールバック サービスを手動で管理する必要がなくなるからです。