【发布时间】:2011-10-26 13:11:48
【问题描述】:
看起来 WCF TCP 连接不是持久的。第一次 ping 回复需要一段时间,但后续过程需要的时间更少。过了一会儿又需要很长时间 - 再次重新连接?
SERVER> 开始于 net.tcp://0.0.0.0:999
CLIENT> Connection created to net.tcp://localhost:999 //不是真正的连接,准备连接
CLIENT> Ping 1s163ms 回复 //第一次连接
CLIENT> Ping 22ms 回复 //已经连接
CLIENT> 26ms 内 Ping 回复
CLIENT> 24ms 内 Ping 回复
CLIENT> 325ms 内 Ping 回复 //重新连接
CLIENT> 19ms 内 Ping 回复
CLIENT> 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();
现在我又遇到了一个错误:
此端点不支持http://tempuri.org/IService/Pong 操作。此端点仅处理 WS-ReliableMessaging 2005 年 2 月的消息。
更新我只修改了服务器端,它导致了错误。然后我将客户端的 TCP 修改为可靠的消息传递。
【问题讨论】:
-
真实世界的测试:在 3 秒内,ping 回复的间隔约为 100 毫秒。如果间隔为 60 秒,则回复约为 500 毫秒,再加上 1 秒 520 毫秒(可能重新连接)
-
我想我需要启用那个超时:reliableSession > enable = true; inactivityTimeout = 10s;