1

我有一个 WCF 服务正在监听 Azure 服务总线中继,由于我无法更改的原因,我在 Windows 服务中自行托管。

一旦服务处于并发负载下 - 通常通过给它一系列长时间运行的请求 - 我们开始从 Azure 服务总线接收以下消息:

<Error>
<Code>502</Code>
<Detail>Bad Gateway.TrackingId:f0e32d08-2721-464c-a108-fe63f1efc443_G23,TimeStamp:4/23/2013 8:22:18 AM</Detail>
</Error>

我们怀疑并发负载会导致这个问题。

我的服务是完全无状态的。

ServiceHost = a WebServiceHost which we instantiate ourselves.
Binding = BasicHttpRelayBinding
InstanceContextMode = Single
ConcurrencyMode = Multiple
SessionMode = NotAllowed
ServiceThrottlingBehaviour.MaxConcurrentConnections = A very large number
Transport = Streaming

我有四个问题:

  1. 上述错误看起来像是并发负载问题吗?
  2. 我应该考虑哪些其他配置选项来提供更大的规模。
  3. 在自托管的 Window Service 环境中,当达到并发连接限制时会发生什么?服务会失败吗?连接会排队吗?
  4. 有没有一种方法可以在任何给定时刻可靠地监控并发连接数。
4

1 回答 1

3

我是Azure Service Bus Relay的一名员工。

我刚刚运行了一个查询来追踪您的问题。(为了将来参考,如果我知道您使用的命名空间会容易得多。

尝试 502 请求时,似乎未检测到ServiceHost 侦听器已连接到服务总线。

最简单的调试方法是连接ConnectionStatusBehavior到您的端点并将OnFaulted事件连接到ServiceHost.

另请注意,服务总线中的特定 VM 可能会在短时间内脱机。发生这种情况时,您ServiceHost可能会出现大约 5-15 秒的离线状态。避免这种情况的最佳方法是始终确保您ServiceHosts在单独的进程/AppDomains 中托管 (2),这样任何单个 VM 中断都不会影响您的服务。(这与网站托管建议非常相似。

如果在遵循这些建议后出现任何意外问题,请直接与我联系,toddreif@microsoft.com以便我们进行调查。

于 2013-04-24T19:50:24.163 回答