【问题标题】:web service slowdown网络服务减速
【发布时间】:2009-02-05 08:00:40
【问题描述】:

我的网络服务速度变慢了。 我的(网络)服务在 gsoap 和托管 C++ 中。它不是托管的 IIS/apache,而是使用 xml。 我的客户在 .NET 中 服务计算时间很短(

新的特殊同步程序现在循环调用服务。 它的负载更高,但所有内容都在不到 30 秒的时间内处理完毕。 使用 sysinternals TCPView,我看到大约 1000 个连接处于 TIME_WAIT 中。 他们减慢了服务速度,现在服务需要几秒钟才能回复。

可能是我需要重置 SoapHttpClientProtocol 连接吗? 有人在循环中调用了 TIME_WAIT 幽灵?

【问题讨论】:

    标签: c# service gsoap


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

    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 之间的端点,所以从表面上看,这看起来是个好主意。如果您考虑一下,就没有办法(至少我想不到)您可以保留端口以供以后使用。您如何保证列表中的下一个端口当前未使用?您正在按顺序选择要使用的端口,如果其他一些应用程序选择了您列表中的下一个端口,那么您就完蛋了。或者,如果在您的客户端计算机上运行的其他一些应用程序开始使用随机端口进行连接怎么办——您将在不可预测的时间点被淹没。您会随机收到一条错误消息,例如“无法访问或不可用远程主机” - 更难排除故障。

    虽然我无法为您提供解决此问题的正确方法,但您可以做的一些事情是:

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

    【讨论】:

      猜你喜欢
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      • 2011-09-15
      • 1970-01-01
      相关资源
      最近更新 更多