WCF并发连接和Azure服务总线中继

时间:2013-04-23 22:43:32

标签: wcf azure concurrency azureservicebus

我有一个WCF服务监听Azure Service Bus Relay,由于我无法更改,我在Windows服务中自我托管。

将服务置于并发加载之后 - 通常是通过给它一系列长时间运行的请求 - 我们开始从Azure Service Bus返回以下消息:

<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. 有没有办法可以在任何特定时刻可靠地监控并发连接数。

1 个答案:

答案 0 :(得分:3)

我是 Azure Service Bus Relay 的员工。

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

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

最简单的调试方法是将ConnectionStatusBehavior挂钩到您的终端,并在OnFaulted上挂钩ServiceHost事件。

另请注意,Service Bus中的特定VM可能会在短时间内脱机。发生这种情况时,ServiceHost可能会显示离线约5-15秒。避免这种情况的最佳方法是始终确保您在单独的进程/ AppDomain中托管(2)ServiceHosts,以便任何单个VM中断都不会影响您的服务。 (这与网站托管推荐非常相似。

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