WCF - 将频道打开很长时间是不好的做法吗?

Sha*_*ica 9 c# wcf .net-4.0 nettcpbinding

我只是在学习围绕WCF的绳索.我打算做的是使用NetTcpBinding在客户端和服务器之间打开双工通道,并使其无限期保持打开状态,以便服务器可以向客户端发起请求.

然后我偶然发现了Jesse Ezell撰写的这篇博客,这似乎表明保持渠道无限期开放是一件坏事,因为你无法发现错误,这会造成各种不稳定因素.

那是对的吗?如果我使用NetTcpBinding并在关系的任何一侧保持对开放通道的引用,那么如果通信失败会发生什么?我如何捕捉失败事件?还有其他什么问题?您使用的.NET框架有什么区别吗?(我在4.0.)

mar*_*c_s 14

我不同意Jesse(作为旁注:他还建议你默认使用WCF服务类作为单身人士,这是我认为最糟糕的想法).....

只要您好好注意在服务器上捕获异常(例如,通过IErrorHandler在服务类中实现接口),就没有必要继续关闭您的通道......尤其是在使用netTcpBinding的公司LAN环境中.

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

如果您确实将服务通道保持打开状态较长时间,则需要能够在客户端处理故障 - 例如,您需要能够从通道出现故障的情况中恢复,毕竟发生了(例如网络瘫痪或类似的事情).

但是如果你这样做,那么在每次通话后不断关闭你的频道并且重新开启下一个节目时我看不到任何好处......


Lad*_*nka 7

是的,一旦不再需要关闭频道,这是一个好习惯.但是在双工通信的情况下通常不常见.当您使用双工通信时,您需要打开通道以允许服务器将消息发送回客户端.WCF通信始终由客户端启动.仅通过保持客户端打开的通道保持回调.

双工通信涉及一些额外的任务来处理连接故障.您的服务应包含一些ping机制,以允许客户端定期检查连接.如果连接失败,客户端将收到异常,您将能够重新建立连接.此外,服务应该在向故障通道发送回叫消息时处理异常.