Azure 服务总线中继偶尔出现 FaultException 错误

7
我们无法确定为什么 Azure 的 BasicHttpRelay 偶尔会抛出一个没有任何详细信息的 FaultException。我们已启用 WCF 诊断跟踪,但可用的堆栈跟踪信息仍然相同。似乎 WCF 客户端通道会短暂失败,然后很快就会返回。
我们确实缓存了 WCF 通道(例如 CreateChannel),但这是我们第一次遇到这种奇怪的行为。我们有其他 Azure 服务总线中继解决方案,这种方法可以正常工作。
错误消息:
“在处理请求时遇到错误。”
堆栈跟踪:
   在System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)处处理回复
   在System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)处调用
   在System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)处调用服务
   在System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)处调用
[0]处重新抛出异常: 在System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)处处理返回消息 在System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)处私有调用 在[我们的WCF方法]...处

FaultException - FaultCode Details:

Name: ServerErrorFault
Namespace: http://schemas.microsoft.com/netservices/2009/05/servicebus/relay
IsPredefinedFault: false
IsReceiverFault: false
IsSenderFault: false

Soap Message

<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看到这些错误。

有人有什么建议吗?我们正在使用Azure SDK 1.8

我尝试使用owner共享密钥配置了一个新的服务总线中继命名空间,但仍然看到相同的结果。


这种情况经常发生吗?它们不是随机出现的暂时性问题,对吧? - Jaxidian
它们似乎表现为每10-20秒的短暂中继中断 - 在2-3秒的时间内,多个请求接收到此错误,仅有单个用户负载(平均每秒3个请求)。应用程序池在服务托管方面从未死亡或重新启动 - 因此必须是中继本身的问题。 - SliverNinja - MSFT
我建议加载系统以获取一些非常一致的指标。它是每隔大约10秒钟发生一次还是随机的?即使您不知道源是什么,也请尝试更多地了解其行为,以便我们可以看到模式并做出有根据的猜测。 - Jaxidian
1
最好联系支持团队解决这个问题。 - TheDude
@TheDude - 感谢你的提示!我们发现这是Relay的一个微软bug。他们正在努力解决这个问题。 - SliverNinja - MSFT
1个回答

1

联系微软后,发现这个问题是使用Http连接模式时Relay或SDK的微软漏洞。目前,唯一的解决方法是确保您开放了适当的出站TCP端口,以确保与Azure Relay的可靠连接。

允许出站TCP端口:9350-9354

微软告诉我们,他们仍在努力解决根本原因。希望这个解决方法能帮助其他人。我们的企业防火墙封锁了这些TCP端口,这迫使所有通信都通过端口80进行,这可能会触发此问题。积极的一面是,打开这些端口可以加快启动侦听器时与中继的连接速度(AutoDetect不必每次检查TCP端口的可用性)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接