次のサービス レイアウトがあります。
- IDuplexSessionRouter としての RoutingService、自己ホスト型、net.tcp 経由のパブリック、root/IService1 への要求をサービス A に転送するように構成され、/IService2 をサービス B に転送するように構成されます。
- IService1 としてのサービス A、デュプレックス、自己ホスト型、セッションあり、ランダム パスの net.pipe 経由
- IService2 としてのサービス B、デュプレックス、自己ホスト型、セッションあり、ランダム パスの net.pipe 経由
- ...
- サービス *、 ..
私がこれを行うのは、サービスごとにポートを持ちたくないし、ポート共有も使いたくないからです。
私が抱えている問題は、net.tcp バインディングを使用して ServiceHost でサービス A をホストし、チャネル ファクトリを使用してチャネルを開き、メソッドを呼び出してセッションを開始し、ServiceHost を閉じるか中止すると、クライアント チャネルの ICommunicationObject インターフェイスの Faulted または Closed イベント。サービスが RoutingService の背後にある場合、サービスでメソッドを呼び出した後にのみ、障害イベントが発生します。それ以外の場合、クライアントはまだ接続されていると考えています。
したがって、基礎となるチャネルに障害が発生したときにRoutingServiceにクライアントセッションを閉じるよう説得することが何とか可能かどうか疑問に思っていますか? これを達成する唯一の方法は、RoutingService の背後にあるサービスでハートビート操作を継続的に呼び出すことです。