Azure 服务总线中继偶发性故障异常
Posted
技术标签:
【中文标题】Azure 服务总线中继偶发性故障异常【英文标题】:Azure Service Bus Relay Occasional FaultException 【发布时间】:2013-03-26 20:17:17 【问题描述】:我们无法确定为什么 Azure BasicHttpRelay 在没有任何详细信息的情况下偶尔会抛出 FaultException
。我们已启用 WCF 诊断跟踪,但可用的堆栈跟踪信息仍然相同。 WCF 客户端通道似乎在短时间内失败,然后很快返回。
我们确实缓存了 WCF 通道(例如CreateChannel
),但这是我们第一次遇到这种奇怪的行为。我们有其他 Azure 服务总线中继解决方案可以很好地使用这种方法。
错误信息:
处理请求时遇到错误。
堆栈跟踪:
在 System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime 操作,ProxyRpc& rpc) 在 System.ServiceModel.Channels.ServiceChannel.Call(字符串操作,布尔单向,ProxyOperationRuntime 操作,Object[] 输入,Object[] 输出,TimeSpan 超时) 在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage 方法调用,ProxyOperationRuntime 操作) 在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage 消息) 在 [0] 处重新抛出异常: 在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg) 在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData,Int32 类型) 在 [我们的 WCF 方法] ...FaultException - FaultCode 详细信息:
名称: ServerErrorFault 命名空间: http://schemas.microsoft.com/netservices/2009/05/servicebus/relay IsPredefinedFault: false IsReceiverFault: 假 IsSenderFault: 假
肥皂消息
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header />
<s:Body>
<s:Fault>
<faultcode xmlns:a="http://schemas.microsoft.com/netservices/2009/05/servicebus/relay">a:ServerErrorFault</faultcode>
<faultstring xml:lang="en-US">There was an error encountered while processing the request.</faultstring>
<detail>
<ServerErrorFault xmlns="http://schemas.microsoft.com/netservices/2009/05/servicebus/relay" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" />
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
通过调试,我们可以看到服务器正确响应了消息请求(通过IDispatchMessageInspector),但客户端未能正确处理响应(IClientMessageInspector 报错) .在客户端通道看似更正 自身后,后续的中继请求将成功。这些故障似乎是间歇性的,而不是负载驱动的。我们从未在 Azure 中继之外使用 basicHttpBinding
看到这些 FaultException
错误。
有人有什么建议吗?我们正在使用 Azure SDK 1.8。
我尝试使用 owner
共享密钥配置一个新的服务总线中继命名空间,但仍然看到相同的结果。
【问题讨论】:
这些情况多久发生一次?它们不仅仅是随机预期的瞬态问题,是吗? 它们的行为似乎每 10-20 秒发生一次短暂的中继中断 - 因为多个请求在 2-3 秒内收到此错误,只有一个用户负载(平均 3 个请求/秒)。应用程序池在服务托管端永远不会死亡或回收 - 所以它一定是中继本身的问题。 我建议加载系统以获得一些非常一致的指标。它或多或少地每 10 秒发生一次还是随机的?即使您不知道来源是什么,也请尝试更多地了解行为,以便我们能够看到模式并做出有根据的猜测。 最好联系支持人员解决此问题。 @TheDude - 感谢您的提示!我们确实发现这是 Relay 的 Microsoft 错误。他们目前正在努力解决问题。 【参考方案1】:联系 MS 后 - 这个问题原来是中继或 SDK 的 MS 错误,特别是在使用 Http Connectivity Mode 时。此时,唯一的解决方法是确保您拥有appropriate outgoing TCP ports opened up 以确保与 Azure 中继的可靠连接。
允许Outgoing TCP Ports: 9350 - 9354
MS 告诉我们,他们仍在努力解决根本原因。希望此解决方法对其他人有所帮助。我们的公司防火墙阻止了这些 TCP 端口,这迫使所有通信都通过端口 80,这必须触发此问题。积极的一面是,打开这些端口可以在启动侦听器时更快地连接到中继(AutoDetect 不必每次都检查 TCP 端口的可用性)。
【讨论】:
以上是关于Azure 服务总线中继偶发性故障异常的主要内容,如果未能解决你的问题,请参考以下文章
Azure 服务总线:通过具有内置重试策略的消息泵接收到的瞬时错误(异常)。为啥?