我的网络服务减速。 我的(网络)服务是在gsoap&amp;托管C ++。这不是IIS / apache托管,而是说xml。 我的客户是.NET 服务计算时间很短(<0.1s以准备回复)。我希望该服务流畅,快速并具有良好的可用性。 我有大约100个客户,响应时间是强制性的1。 客户每分钟约有1个请求。 客户端通过tcp open port test检查Web服务是否存在。 因此,为了避免可能的拥塞,我将gSoap KeepAlive变为false。 直到一切运行良好:我在TCPView(sysinternals)中看到连接
新的特殊同步程序现在在循环中调用服务。 它的负载更高,但一切都在30秒内处理完毕。 使用sysinternals TCPView,我看到大约有1千个连接在TIME_WAIT中。 他们放慢了服务速度,现在服务回复需要几秒钟。
我是否需要重置SoapHttpClientProtocol连接? 有人在循环中有一个带有Web服务调用的TIME_WAIT鬼吗?
答案 0 :(得分:1)
听起来你没有在通话结束后关闭连接并在每个请求上打开新连接。关闭连接或重复使用打开的连接。
答案 1 :(得分:0)
对上面提到的实现要非常小心。他们有严重的问题。
yakkowarner.blogspot.com/2008/11/calling-web-service-in-loop.html(以上评论)中描述的实施:
问题:下次使用wsdl.exe重新生成Web服务时,您的所有工作都将被清除,而您将忘记您没有提及此修复程序相当hacky依靠消息字符串来采取行动。
forums.asp.net/t/1003135.aspx(评论上)中描述的实现:
问题:您正在选择5000到65535之间的端点,因此从表面上看这似乎是一个好主意。如果你仔细想想,你可以保留以后可以使用的端口(至少没有我能想到的)。如何保证列表中的下一个端口当前未使用?您正在按顺序选择要使用的端口,如果某个其他应用程序选择了您列表中的下一个端口,那么您将被清除。或者,如果客户端计算机上运行的某个其他应用程序开始使用随机端口进行连接,那么您将在UNPREDICTABLE点及时进行管理。您会随机收到错误消息,例如“无法访问远程主机或无法访问” - 更难以排除故障。
虽然我无法为您解决此问题,但您可以做的一些事情是: