网络服务减速

时间:2009-02-05 08:00:40

标签: c# service gsoap

我的网络服务减速。 我的(网络)服务是在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鬼吗?

2 个答案:

答案 0 :(得分:1)

听起来你没有在通话结束后关闭连接并在每个请求上打开新连接。关闭连接或重复使用打开的连接。

答案 1 :(得分:0)

对上面提到的实现要非常小心。他们有严重的问题。

  1. yakkowarner.blogspot.com/2008/11/calling-web-service-in-loop.html(以上评论)中描述的实施:

    问题:下次使用wsdl.exe重新生成Web服务时,您的所有工作都将被清除,而您将忘记您没有提及此修复程序相当hacky依靠消息字符串来采取行动。

  2. forums.asp.net/t/1003135.aspx(评论上)中描述的实现:

    问题:您正在选择5000到65535之间的端点,因此从表面上看这似乎是一个好主意。如果你仔细想想,你可以保留以后可以使用的端口(至少没有我能想到的)。如何保证列表中的下一个端口当前未使用?您正在按顺序选择要使用的端口,如果某个其他应用程序选择了您列表中的下一个端口,那么您将被清除。或者,如果客户端计算机上运行的某个其他应用程序开始使用随机端口进行连接,那么您将在UNPREDICTABLE点及时进行管理。您会随机收到错误消息,例如“无法访问远程主机或无法访问” - 更难以排除故障。

  3. 虽然我无法为您解决此问题,但您可以做的一些事情是:

    1. 尽量减少网络服务请求的数量,或在更长的时间内将其分散开来
    2. 对于您的应用类型,也许Web服务不是正确的架构 - 对于响应时间为1毫秒的内容,您应该使用消息传递系统 - 而不是Web服务
    3. 使用Windows中的注册表将操作系统允许的连接数设置为65K
    4. 将操作系统在TIME_WAIT中保留的时间设置为较低的数字(这会显示自己的问题列表)