2011-12-06 31 views
0

我使用的绑定NetTcpBinding(通过互联网),所有并发的东西和maxconnection设置为高值(4000最大连接,并发,等等),所以节流设置真的很高,事实上从服务器的wcf性能计数器,我可以看到没有一个并发计数器是满的,但是...但我经历了一个超时噩梦描述如下:WCF NetTcpBinding超时问题 - 奇怪的行为

“超时只是定义了等待服务真正失败并给出错误所需的时间,但修改此超时的值对成功的可能性没有影响。基本上,在服务请求的第一秒内发生了一些事情,它永远不会恢复,WCF不会奇迹般地重试网络rk连接为你。很好,有时建立网络连接并不好。但是,如果您的超时时间为2小时,则必须等待2个小时,否则它将无法工作,然后它才会最终确认它不起作用并且会出错。“

我从上述说明中this thread这正是我遇到的问题

操作员每天做同样的操作一千次和几千次,有时他们会超时错误,即使他们可以快速执行相同的操作后没有任何延迟,同时有人正在获取超时,在与另一个客户端实例在同一台计算机上,他们可以进行调用并且速度很快!并且检查服务器端的错误没有记录在服务实现中,存储在数据库中,所以e方法从来没有被请求调用过,所以我在调用初始化过程中绝对考虑了一些错误,可能是身份验证,标记化,压缩或其他层次的错误,但是我找不到任何血腥的错误消息(也许启用wcf跟踪?)。

无论如何,事实是,我们得到了与传统的ASP客户端服务器请求一样的传统ASP编写的旧软件,并且这个问题从未发生,如果我们谈论的是同一个互联网连接,那么我不得不思考?当出现一些错误时,Internet Explorer会让事情变得神奇吗? WCF得到了一些我可以设置的隐藏配置来改善这种行为?我可以说的是,我试图在WsHttpBinding中配置我们的wcf服务,并且这种超时接缝永远不会发生,即使我们仍然收到一些错误,但即时连接立即释放,即使连接相当与tcp连接相同,因为默认情况下wshttpbinding被配置为keepalive tcp频道,但我仍然不明白为什么与tcp我得到这种超时。

如果有人能帮助我,我会非常感激!

谢谢!

+0

“我们得到了写在传统的ASP与正常的HTTP客户端 - 服务器请求的同旧的软件” ......不,你不知道。你可能有一个经典的ASP应用程序,它可以模拟相同的业务流程或不是什么,但它不是同一个软件。 ASP和.NET是拥有共同祖先IMO的两种不同的鸟类。 – Tim

+0

是的,我知道这是不同的软件,但我的意思是说,通过http请求使用互联网,没有任何问题使用浏览器作为互联网浏览器 –

回答

1

这个问题与坏硬件有关,调试真的很困难,而且wireshark(tcp sniffer)的数据包没有显示任何特定的错误,我们发现了一些tcp-retries,这可能是一个症状,但实际上数据包只是停留在调制解调器路由器内的某个地方,这是一个电信调制解调器(pirelli gate 2 plus),在更换调制解调器/路由器后,问题完全消失。

无论如何,我们发现wsHttpBinding over http,对于没有控制权的互联网连接更可靠,而且您无法确定网站上安装了哪些硬件。

希望这也能帮助别人:)

0

我们遇到了同样的问题,但使用WsHTTPBinding。您可以通过在循环中调用相同的操作来模拟上述场景,而无需明确关闭客户端连接。 为避免发生此问题,请检查在每个操作完成时是否明确关闭客户机连接,否则请求将堆积在服务器上。以client.Close()方式明确关闭客户端。

这将消除服务器中请求的堆积并提高应用程序的性能。

+0

谢谢你的答复。其实我正在使用[Castle WCF工具](http://www.castleproject.org/container/facilities/trunk/wcf/index.html),并应该管理连接的关闭,但无论如何我会调查它。 但是假设种姓设施没有关闭连接,为什么你认为我有时只是出错,为什么不是所有的客户都遇到同样的问题? 我也使用tcp嗅探器检查了打开的tcp连接,并且我看到只有几个连接仍处于活动状态,并且每次调用仍然使用该连接。 –