WCF阻止服务器断开连接

时间:2013-11-07 11:17:43

标签: c# wcf mono

我有一个小型客户端/服务器应用程序。我使用手动编码的TCP连接来允许客户端控制服务器,但现在我已将其转换为WCF。这为我节省了大量代码,但它也给了我一套全新的问题需要解决......

最新的问题是,一段时间后,服务器断开客户端连接。在任何情况下,我都希望这种情况发生。目前,客户端通过其运行大约有四分之一的时间,然后因为服务器已断开连接而爆炸。我需要阻止这种情况发生。

我能够编写一个简单的WCF客户端/服务器对来复制问题。似乎如果客户端调用一个方法,等待15分钟,然后调用第二个方法,则第二个调用会抛出一个异常,这个异常是关于已经关闭的套接字的问题。如果我减少延迟,一切正常。

我在另一个答案中读到设置ReceiveTimeout应该解决这个问题。但是,当我尝试它时,这只能解决.NET下的问题;在Mono下运行时,它仍然会断开。由于Mono是实际的目标平台,因此不太有用。

(考虑一下SSH - 你会希望SSH服务器断开你只是因为你没有输入任何东西一段时间。也许你发布了一个长时间运行的shell命令或者其他东西..只是因为服务器没有从你那里收到任何数据并不意味着什么都没发生!这当然不代表你的连接应该被删除......)

所有代码都是C#。该服务器是一个自托管控制台应用程序。客户端也是一个控制台应用程序。所有配置都在代码中。使用默认设置绑定NetTcpBinding

如何让客户端成功运行完成?

我有一些想法,但没有一个是漂亮的:

  • 手动发送心跳消息。 (呸!)
  • 检测断线并自动重新连接? (再次,哎呀。)
  • 开启“可靠模式”。 (我猜测,因为服务器故意结束会话,这无济于事。)
  • 每次方法调用创建一个连接。 (这将是相当多的代码......)
  • 停止使用WCF?

1 个答案:

答案 0 :(得分:0)

最后,我通过让客户端为每个命令建立新连接来“修复”这个问题。这可以接受,因为客户端不会经常发送命令。不得不写十几次连接/断开代码,这很烦人。