【发布时间】:2012-10-24 02:57:07
【问题描述】:
使用 WCF 制作客户端/服务器样式的应用程序,但我找不到任何说明 NetTcpBinding 是否提供持久连接的文档?
我希望我的客户端一次连接并保持连接到服务器数周。 (是的,我知道我需要处理断开连接等。)
NetTcpBinding 是否允许像这样的长连接?如果是这样,我需要指定什么或者这是默认行为吗?
【问题讨论】:
-
这可能取决于几件事,其中包括您如何托管服务和管理客户端代理的生命周期。即使这样,我也不确定 WCF 是否会保持客户端和服务器连接持续打开,但是您为什么要关心? 为什么您希望 WCF 将底层连接保持打开数周?你确定你不是asking about Y?
-
服务器需要保持每个客户端的连接,因为速度是我正在构建的系统的关键要求。当从服务器发送消息时,它需要尽快到达每个客户端。建立连接所花费的时间会导致无法接受的延迟。
-
@Kelly 从客户端频繁 ping WCF 服务怎么样?通过这种方式,您可以与服务stackoverflow.com/questions/1085220/pinging-wcf-services 保持长时间的连接。据我所知,由于通道工厂的创建,只有第一次调用需要更多时间,并且可能是其他组件,但后续调用(通道工厂将被缓存)通常会更快,并且您正在使用 net.tcp,这当然会更快.你真的做过测量吗?
-
@Kelly 你能解释一下你的服务吗?
-
对服务的最佳描述是 pub/sub 样式模型。程序发布到服务,连接到它的客户端可以订阅以获取信息。它比这个做得更多,但这是它的核心。因此,我不希望订阅者仅因为他们正在收听非流动性主题而断开连接。目前使用 RabbitMQ 发布/订阅,但计划放弃它,并且想要一个自定义解决方案,因为它目前太慢了。 (是的,我知道 ZeroMQ 更快,但仍需要自定义,以便更好地控制它。)