【问题标题】:Tell when wcf client lost connection告诉 wcf 客户端何时失去连接
【发布时间】:2014-12-07 07:04:02
【问题描述】:

我有几台计算机用作 WCF 客户端,它们连接到用作 WCF 服务的计算机。 现在假设一个客户端连接丢失(即电缆断开),我怎么知道服务端发生了这种情况? 我尝试使用 wcf 回调事件 Closing/Closed 但我没有接到电话。 我正在用 C# 编写。

最好的问候。 阿迪。

【问题讨论】:

  • 告诉我们更多关于您的服务。是否将数据推送给客户端?它是否在某个时候调用客户(从而使客户自己服务)?你的服务是async吗?不知道为什么您的服务需要知道客户端突然断开连接。
  • @micky duncan 这里是我写的一个例子,作为对彼得的回答的回复:“假设我在客户端和服务之间进行了聊天,服务有一个 gui 显示所有连接的客户端我可以和他们聊天。当客户端连接时,服务会收到一条消息,我可以显示它。如果客户端的电缆断开连接,我将不知道,在 GUI 中我仍然会看到客户端连接“
  • 好的。您的系统需要在 Internet 上运行还是只需要在 LAN 上运行?不知道WCF P2P APIs里面有没有什么东西?

标签: c# wcf service client


【解决方案1】:

回调不起作用,因为您的客户无法告知服务“我与您有密切联系”。

您需要的是心跳 - 由您的客户端生成的周期性信号,用于指示正​​常操作。如果服务没有及时从其中一个客户端接收到这个信号,它可以猜测这个客户端丢失了连接。

此外,您需要一种在服务端区分一个客户端和另一个客户端的方法。例如,每个客户端都可以在心跳信号中传递唯一的 id。

【讨论】:

  • 感谢您的快速回复,Heartbeat 一定会给我所需的答案。这将是我的最后一个结果,因为我正在寻找更高效的东西。
【解决方案2】:

您的服务不应该关心网络电缆是否断开。 TCP 的一个特性是,除非有人主动发送数据,否则它可以容忍网络连接的瞬间中断。

在 WCF 中更是如此,其中有额外的框架层来帮助保护您免受网络不可靠性的影响。

通过尝试检测客户端断开连接来完成的主要任务是降低可靠性和可用性。

【讨论】:

  • 假设我在客户端和服务之间进行了聊天,该服务有一个 gui 显示所有连接的客户端,我可以与他们聊天。当客户端连接服务时,会收到一条消息,我可以显示它。如果客户端的电缆断开连接,我将不知道,在 GUI 中我仍然会看到客户端已连接。
猜你喜欢
  • 2012-09-28
  • 2012-02-29
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
  • 2011-07-07
相关资源
最近更新 更多