C# 在WCF服务中的异步方法调用期间检测连接故障

C# 在WCF服务中的异步方法调用期间检测连接故障,c#,.net,wcf,asynchronous,long-polling,C#,.net,Wcf,Asynchronous,Long Polling,我有一个异步WCF服务实现,我想在WCF方法调用期间检测客户端何时中止连接 基本上,这就是我想要的: 客户端调用WCF方法 服务器开始异步处理请求 客户端中止连接(或由于任何原因导致连接失败) 应通知服务器客户端已中止连接 这可能吗 这是一个很长的轮询实现。或者,服务器能否确保客户端成功接收到响应?如果没有,则应将响应保存为下一个轮询请求。我不知道是否有可靠的方法知道客户端已连接。看到了吗 建议的一些替代方案是使用双工通道或队列。基于队列的解决方案将服务器向队列发送响应,而客户端从队列中拾取这些

我有一个异步WCF服务实现,我想在WCF方法调用期间检测客户端何时中止连接

基本上,这就是我想要的:

  • 客户端调用WCF方法
  • 服务器开始异步处理请求
  • 客户端中止连接(或由于任何原因导致连接失败)
  • 应通知服务器客户端已中止连接
  • 这可能吗


    这是一个很长的轮询实现。或者,服务器能否确保客户端成功接收到响应?如果没有,则应将响应保存为下一个轮询请求。

    我不知道是否有可靠的方法知道客户端已连接。看到了吗

    建议的一些替代方案是使用双工通道或队列。基于队列的解决方案将服务器向队列发送响应,而客户端从队列中拾取这些响应。队列可以在MSMQ、DB、Azure中实现


    谢谢

    您可以设置一个轮询解决方案,在该解决方案中,客户端不会保持连接以等待应答,而是发出请求并立即断开连接。然后每X秒重新连接一次,以轮询请求是否已完成

    在服务器上,如果您在X*2秒内没有看到客户端轮询,则客户端发生了一些问题,您应该中止请求


    要实现这一点,服务器上需要一些额外的基础设施来跟踪哪些请求处于活动状态,以及您最后一次看到客户端的时间,不幸的是。

    根据我的经验,对于这种类型的消息交换模式,最可靠、最容易实现的解决方案是@Chandermani建议的基于MSMQ的选项。MSMQ不是一个选项,因为我将使用Linux客户端。我想我会考虑到这个限制重新设计我的系统。我假设你使用的是TCP。除了定期发送“保持活动”消息外,TCP实际上没有一种方法来判断“另一方”是否仍然活动。一些建立在TCP之上的协议可以做到这一点,但不是原始的TCP,IMHO。然而,我认为,服务器可以判断客户端是否收到响应,因为TCP可以检测从客户端发送的确认。