7

我们无法确定为什么 Azure BasicHttpRelayFaultException在没有任何详细信息的情况下偶尔会抛出异常。我们已启用 WCF 诊断跟踪,但可用的堆栈跟踪信息仍然相同。似乎 WCF 客户端通道在短时间内失败,然后很快返回。

我们确实缓存了 WCF 通道 ( egCreateChannel ),但这是我们第一次遇到这种奇怪的行为。我们有其他 Azure 服务总线中继解决方案可以很好地使用这种方法。

错误信息:

处理请求时遇到错误。

堆栈跟踪:

   在 System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime 操作,ProxyRpc& rpc)
   在 System.ServiceModel.Channels.ServiceChannel.Call(字符串操作,布尔单向,ProxyOperationRuntime 操作,Object[] 输入,Object[] 输出,TimeSpan 超时)
   在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, 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:
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 中继之外看到这些FaultException错误。basicHttpBinding

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

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

4

1 回答 1

1

与 MS 联系后 - 这个问题原来是中继或 SDK 的 MS 错误,特别是在使用Http Connectivity Mode时。此时,唯一的解决方法是确保打开适当的传出 TCP 端口,以确保与 Azure 中继的可靠连接。

允许传出 TCP 端口:9350 - 9354

MS 告诉我们,他们仍在努力解决根本原因。希望此解决方法对其他人有所帮助。我们的公司防火墙阻止了这些 TCP 端口,这迫使所有通信都通过端口 80,这必须触发此问题。积极的一面是,打开这些端口可以在启动侦听器时更快地连接到中继(AutoDetect不必每次都检查 TCP 端口的可用性)。

于 2013-05-08T17:42:30.333 回答