0

我有以下服务布局:

  • RoutingService 作为 IDuplexSessionRouter,自托管,通过 net.tcp 公开,配置为将请求转发到 root/IService1 到服务 A,/IService2 到服务 B,依此类推
    • 服务 A 作为 IService1,双工,自托管,带会话,通过 net.pipe 随机路径
    • 服务 B 作为 IService2,双工,自托管,带会话,通过 net.pipe 随机路径
    • ...
    • 服务 *, ..

我这样做是因为我不想为每个服务都有一个端口,也不想使用端口共享。

我遇到的问题是,当我使用 net.tcp 绑定在 ServiceHost 中托管服务 A 时,使用通道工厂打开通道并通过调用方法启动会话,然后关闭或中止 ServiceHost,我可以观察到客户端通道的 ICommunicationObject 接口上的故障或关闭事件。当服务位于 RoutingService 后面时,只有在调用服务上的方法后才会收到错误事件。否则客户端仍然认为他已连接。

所以我想知道当底层通道出现故障时,是否有可能说服 RoutingService 关闭客户端会话?我看到的唯一方法是在 RoutingService 后面的服务上持续调用心跳操作。

4

0 回答 0