2013-04-23 101 views
1

我有一个WCF服务正在监听Azure服务总线中继,这是因为我无法更改的原因我是在Windows服务中自托管的。WCF并发连接和Azure服务总线中继

服务一旦被并发负载下投入 - 通常是通过赋予一系列的长时间运行的请求 - 我们开始从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. 有没有一种方法可以在任何特定时刻可靠地监控并发连接的数量。

回答

3

我是的员工Azure服务总线中继

我刚刚运行了一个查询来追踪您的问题。 (以供将来参考,这本来是容易得多,如果我知道你正在使用的命名空间。

看来,作为连接到服务总线当502请求是没有检测到ServiceHost的监听尝试。

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

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

如果有任何意外发生的问题按照这些建议后,请直接联系[email protected]我,所以我们进行调查。

+0

嗨托德,谢谢你的回复。我们一直在使用ConnectionStatusBehaviour诊断我们的连接,并且在此期间没有监视任何连接事件。它目前是澳大利亚的公共假期,但我会在接到您的报价后与您联系,并在重返工作时与您联系并提供更多详细信息。再次感谢。 – 2013-04-25 07:36:54