我刚刚开始了解 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/