我们无法确定为什么Azure BasicHttpRelay 偶尔会抛出FaultException
而没有任何细节。我们已启用WCF诊断跟踪,但可用的堆栈跟踪信息仍然相同。似乎WCF客户端通道在短时间内失败,然后很快就会返回。
我们会缓存WCF频道(例如CreateChannel
),但这是我们第一次遇到这种奇怪的行为。我们有其他Azure Service Bus中继解决方案可以正常使用这种方法。
处理请求时遇到错误。
at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc) at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at [our WCF method]...
名称: ServerErrorFault
命名空间: http://schemas.microsoft.com/netservices/2009/05/servicebus/relay
IsPredefinedFault: false
IsReceiverFault: false
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
共享密钥配置新的服务总线中继命名空间,但仍看到相同的结果。
答案 0 :(得分:1)
在联系MS之后 - 这个问题被证实是Relay或SDK的MS错误,特别是在使用Http Connectivity Mode时。此时,唯一的解决方法是确保您拥有appropriate outgoing TCP ports opened up以确保与Azure Relay的可靠连接。
允许Outgoing TCP Ports:9350 - 9354
MS告诉我们,他们仍在努力解决根本原因。希望这种解决方法能够帮助其他人。我们的企业防火墙阻止了这些TCP端口,这迫使所有通过端口80的通信必须触发此问题。积极的一面是,在启动监听器时,打开这些端口可以更快地连接到中继站( AutoDetect不必每次都检查TCP端口可用性)。