c# - WCF - 长时间打开 channel 是不好的做法吗?

标签 c# wcf .net-4.0 nettcpbinding

我刚刚开始了解 WCF。我打算做的是使用 NetTcpBinding 在客户端和服务器之间打开一个双工 channel ,并无限期地保持该 channel 打开,以便服务器可以向客户端发起请求。

然后我偶然发现了这个blog by Jesse Ezell ,这似乎表明无限期地保持 channel 打开是一件坏事,因为您无法捕获错误,这会导致各种不稳定性。

这样对吗?如果我使用 NetTcpBinding 并在关系的任何一方保留对开放 channel 的引用,如果出现通信故障会怎样?如何捕获失败事件?还有哪些陷阱?您使用的 .NET 框架有什么不同吗? (我在 4.0。)

最佳答案

我不同意 Jesse 的观点(作为旁注:他还建议您默认使用 WCF 服务类作为单例,在我看来这是最糟糕的想法)... .

只要您小心地捕捉服务器上的异常(例如,通过在您的服务类中实现 IErrorHandler 接口(interface)),就没有必要继续关闭您的 channel ……尤其是不在使用 netTcpBinding 的公司 LAN 环境中。

与例如相反数据库连接通常会产生许可费用,保持与服务机器的网络连接打开应该不会造成任何问题。它通常也不是有限的资源,因此不断打开和关闭它似乎毫无意义。

如果您确实要让您的服务 channel 保持较长时间的开放,您需要在客户端处理故障 - 例如您需要能够从 channel 出现故障的情况中恢复,毕竟发生了异常(例如网络中断或类似情况)。

但如果你这样做,那么我看不出在每次通话后不断关闭你的 channel 并为下一个...重新打开有任何好处......

关于c# - WCF - 长时间打开 channel 是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4578458/

相关文章:

c# - 在 .NET 4 下运行的 .NET 2 和 .NET 4 程序集之间有什么区别

c# - 使用 Task.Factory.StartNew 新创建的线程启动非常慢

c# - 面向 .NET 4.5.1 和 Windows 8.1/WP8.1 的库中的套接字

.net - WCF序列化返回对象后关闭NHibernate session

c# - Powershell 脚本和 Windows 服务之间通信的最佳方式是什么?

wcf - 为什么我会收到此 WCF 错误消息?

.net - c# 环境中动态功能运行时的 future ?

c# - 删除游戏对象的最后一个 child 的简单方法

c# - OutOfMemoryException 仅在使用 VS2010 编译时在 Release 模式下出现?

c# - 获取附加属性 "Canvas.Left"