【问题标题】:Load testing WCF services gives huge (>200 sec) responses负载测试 WCF 服务会产生巨大的(>200 秒)响应
【发布时间】:2015-08-09 03:08:28
【问题描述】:

我有一项服务正在由第三方进行负载测试。开始几分钟后,我们开始看到请求挂起很长一段时间,调用者最终超时(60 秒后)。

他们正在测试 15 个用户,每个用户同时使用两台设备,因此总共有 30 个连接。

服务是更复杂操作的简单外观,调用外部系统。对我们与外部系统的通信进行基准测试,看起来一切都在我们预期的时间内(不到 200 毫秒)响应。

IIS 日志显示了一堆非常高的请求(> 200 秒),这些请求最终确实返回 200 并具有 Win32 错误代码 ERROR_NETNAME_DELETD(错误 64)。我检查了服务日志,可以匹配对请求的响应(基于 SOAP 消息 ID),并且可以看到我们最终以正确的信息响应(尽管客户端早已放弃)。

关于什么可能导致这种行为的任何想法?我们使用 wsHttpBinding 在 IIS 中托管,并且我们使用 WS-Security 和 x509 证书(消息和传输加密)。

我们的服务内部没有基准日志记录,但代码是 WCF 请求到服务器请求的非常简单的映射,发出请求,并将响应映射到 WCF 响应。我们手动执行此操作,不涉及解析(直接分配)。

【问题讨论】:

  • 服务实例化是如何配置的?并发是如何配置的?
  • 使用同步 = false, Instance Per Call

标签: performance wcf iis soap scalability


【解决方案1】:

经过详细调查(包括让 Microsoft 支持参与其中)后,我们遇到了 serviceThrottling 默认设置,特别是 maxConcurrentSessions。我们从perfmon 确定了这一点 - 有一个计数器。我们不确定为什么在使用 .NET 客户端调用服务时会出现这种情况。

事实证明,这个应用程序的 Java 使用者使用 CXF,没有遵守 WSDL(特别是关于 WS-SecureConversation 的部分)并且在关闭连接时关闭会话。

我们的解决方案是将maxConcurrentSessions 提高到一个高数值,将inactivityTimeout 设置为低(到一分钟)以强制放弃会话。此外,我们将 establishSecurityContext 设置为 false 以避免 WSS 协商消耗额外的会话。

该解决方案并不优雅,因为服务日志中充斥着关于强制会话关闭的错误,但它解决了我们在此处看到的问题。不幸的是,我们需要 WS-Security,所以我们的解决方案需要坚持下去。

我希望这对某人有所帮助,因为这是一个有趣且耗时的问题。

【讨论】:

  • 我对服务日志错误以及大型机有疑问。我的个人资料有一个 Link ed In 的链接,我很想进一步了解它们
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
相关资源
最近更新 更多