C# 如何建立/模拟持久TCP连接?

C# 如何建立/模拟持久TCP连接?,c#,.net,wcf,C#,.net,Wcf,看起来WCF TCP连接不是持久的。第一次ping回复需要一段时间,但后续过程需要的时间更少。过了一会儿,它又花了很长时间——又一次重新连接 服务器>已在网络上启动。tcp://0.0.0.0:999 客户端>已创建到网络的连接。tcp://localhost:999 //不是真正的连接,准备好连接了吗 客户端>在1s163ms//第一次连接中Ping应答 客户端>在22毫秒内Ping应答//已连接 客户端>Ping在26毫秒内回复 客户端>Ping在24毫秒内回复 客户端>在325毫秒内Pin

看起来WCF TCP连接不是持久的。第一次ping回复需要一段时间,但后续过程需要的时间更少。过了一会儿,它又花了很长时间——又一次重新连接

服务器>已在网络上启动。tcp://0.0.0.0:999

客户端>已创建到网络的连接。tcp://localhost:999 //不是真正的连接,准备好连接了吗

客户端>在1s163ms//第一次连接中Ping应答

客户端>在22毫秒内Ping应答//已连接

客户端>Ping在26毫秒内回复

客户端>Ping在24毫秒内回复

客户端>在325毫秒内Ping回复//重新连接

客户端>Ping在19毫秒内回复

客户端>以767ms//重新连接Ping回复

如果这是真的,tcp连接断开之前的空闲时间值是多少?我需要保持连接

更新修改代码:

NetTcpBinding tcpBind = new NetTcpBinding();
tcpBind.ReliableSession.Enabled = true;
tcpBind.ReliableSession.Ordered = true;
tcpBind.ReliableSession.InactivityTimeout = TimeSpan.FromMinutes(10);

ServiceHost svh = new ServiceHost(typeof(ServiceImplementation));
svh.AddServiceEndpoint(
    typeof(WCFSimple.Contract.IService),
    //new NetTcpBinding(),
    tcpBind,
    String.Format("net.tcp://{0}:{1}", ip, port));
svh.Open();
现在我又犯了一个错误:

此终结点不支持该操作。此终结点仅处理WS-ReliableMessaging 2005年2月消息


更新我只修改了服务器端,这导致了错误。然后我将客户端的TCP修改为可靠消息传递。

我认为Ping不是测试TCP连接的好工具。因为Ping使用ICMP作为其底层协议,而不是TCP


我建议您创建一个WCF客户端,连接到服务,然后通过一些网络嗅探工具检查TCP连接,或者简单地使用netstat进行快速检查。

通常,WCF连接是暂时的,尽管在后台会有一些连接池

使用net.tcp作为传输,可以实现持久(长期)连接。您发布的代码是实现这一点的一种方法

欲了解更多信息和其他选择,请查看MSDN杂志2006年10月的一篇文章


属性上可用的和属性也很有用。

真实世界的测试:在3秒内,ping回复的间隔约为100ms。如果间隔为60秒,则回复为~500毫秒,加上1s520ms(可能重新连接),我认为需要启用该超时:reliableSession>enable=true;不活动时间=10s;它不是ICMP,它是标准WCF服务,只是名称是Ping。客户端发送时间,服务器响应值。