GENERAL_SET_RESPONSE_HEADER 期间 WCF 服务间歇性挂起

Intermittent hang in WCF service during GENERAL_SET_RESPONSE_HEADER

我的 WCF 服务间歇性挂起。在服务恢复之前,通常需要几毫秒的调用开始需要 30 秒或更长时间才能完成。然而,所有调用都成功完成。 New Relic 报告请求中的所有时间都花费在 ExecuteRequestHandler 中。

我在服务器上为所有请求启用了失败的请求跟踪并观察和等待。当网站开始挂起时,我拉下了痕迹,我看到以下是典型的:

136 - GENERAL_SET_RESPONSE_HEADER

HeaderName: Content-Length HeaderValue:2237 Replace:false

Informational

273281 ms

日志中的所有其他步骤都以 0 毫秒计时。挂起功能各不相同,当服务 运行 通常具有完全相同的参数和响应负载的完全相同的功能表现完美。似乎当站点开始挂起时,所有请求都被阻止,直到它恢复。

任何人都可以建议我从这里去哪里。

谢谢

从我的角度来看,这太过分了而且很烦人。 New Relic 说该服务在 ExecuteRequestHandler 中挂起,我跳进了一个兔子洞试图诊断挂起。

解决方案原来是调整 WCF 服务的节流配置:

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="...">
          <serviceThrottling maxConcurrentCalls="512" maxConcurrentSessions="3200" maxConcurrentInstances="3712" />

事实证明,即使没有此条目,WCF 服务默认也会受到限制,并且最近 MS 增加了默认值。我的服务以大约 200 rpm 的速度下降(我认为这并不过分)。我使用的值是新默认值的 8 倍,现在一切正常。

为什么服务会受到限制,但没有迹象表明这是在默认配置条目中发生的,我不知道。 WCF 一直是配置地狱,我下定决心不再使用它。网页API从这里开始。

希望有一天这对某人有所帮助:)