服务总线 - “服务器没有提供有意义的回复;这可能是由于过早的会话关闭引起的”

时间:2013-01-07 10:55:00

标签: asynchronous azure servicebus

我正在遵循此实现来接收来自服务总线的消息:http://msdn.microsoft.com/en-us/library/windowsazure/hh851744.aspx

问题在于,有时我会收到此错误,而我无法弄清楚我能做些什么来解决这个问题。

Microsoft.ServiceBus.Messaging.MessagingCommunicationException was unhandled by user code
  HResult=-2146233088
  Message=Error during communication with Service Bus. Check the connection information, then retry.
  Source=Microsoft.ServiceBus
  IsTransient=true
  StackTrace:
    Server stack trace: 
       at Microsoft.ServiceBus.Messaging.Sbmp.SbmpMessageReceiver.EndReceiveCommand(IAsyncResult result, IEnumerable`1& messages)
       at Microsoft.ServiceBus.Messaging.Sbmp.SbmpMessageReceiver.ReceiveAsyncResult.<GetAsyncSteps>b__27(ReceiveAsyncResult thisPtr, IAsyncResult a)
       at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.StepCallback(IAsyncResult result)
    Exception rethrown at [0]: 
       at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)
       at Microsoft.ServiceBus.Common.AsyncResult`1.End(IAsyncResult asyncResult)
       at Microsoft.ServiceBus.Messaging.Sbmp.SbmpMessageReceiver.OnEndTryReceive(IAsyncResult result, IEnumerable`1& messages)
       at Microsoft.ServiceBus.Messaging.OpenOnceManager.OpenOnceManagerAsyncResult`1.OperationComplete(IAsyncResult result)
       at Microsoft.ServiceBus.Common.AsyncResult.AsyncCompletionWrapperCallback(IAsyncResult result)
    Exception rethrown at [1]: 
       at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)
       at Microsoft.ServiceBus.Messaging.OpenOnceManager.OpenOnceManagerAsyncResult`1.End(IAsyncResult result, T& output)
       at Microsoft.ServiceBus.Messaging.OpenOnceManager.End[T](IAsyncResult result, T& output)
       at Microsoft.ServiceBus.Messaging.MessageReceiver.EndTryReceive(IAsyncResult result, IEnumerable`1& messages)
       at Microsoft.ServiceBus.Messaging.MessageReceiver.EndReceive(IAsyncResult result)
       at Microsoft.ServiceBus.Messaging.SubscriptionClient.EndReceive(IAsyncResult result)
       at Azure.WorkerCommandProcessor.WorkerRole.<>c__DisplayClass17.<messageHandler>b__10(IAsyncResult ar) in d:\TFS\DEV\Azure\Azure.Development\Azure.WorkerCommandProcessor\WorkerRole.cs:line 247
       at Microsoft.Practices.TransientFaultHandling.RetryPolicy.<>c__DisplayClass7.<ExecuteAction>b__4(IAsyncResult ar)
       at Microsoft.Practices.TransientFaultHandling.RetryPolicy.<>c__DisplayClass10`1.<>c__DisplayClass12.<ExecuteAction>b__c()
       at Microsoft.Practices.TransientFaultHandling.RetryPolicy.<>c__DisplayClass10`1.<ExecuteAction>b__d(Action a)
  InnerException: System.ServiceModel.CommunicationObjectFaultedException
       HResult=-2146233087
       Message=Internal Server Error: The server did not provide a meaningful reply; this might be caused by a premature session shutdown..TrackingId:bb1281ab-2334-4fa3-88bb-eadce71b0d37, Timestamp:07-01-2013 10:46:52
       Source=Microsoft.ServiceBus
       StackTrace:
         Server stack trace: 
         Exception rethrown at [0]: 
            at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)
            at Microsoft.ServiceBus.Messaging.Sbmp.DuplexRequestBindingElement.DuplexRequestSessionChannel.DuplexCorrelationAsyncResult.End(IAsyncResult result)
            at Microsoft.ServiceBus.Messaging.Sbmp.DuplexRequestBindingElement.DuplexRequestSessionChannel.EndRequest(IAsyncResult result)
            at Microsoft.ServiceBus.Messaging.Channels.ReconnectBindingElement.ReconnectChannelFactory`1.RequestSessionChannel.RequestAsyncResult.<GetAsyncSteps>b__4(RequestAsyncResult thisPtr, IAsyncResult r)
            at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.StepCallback(IAsyncResult result)
         Exception rethrown at [1]: 
            at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)
            at Microsoft.ServiceBus.Common.AsyncResult`1.End(IAsyncResult asyncResult)
            at Microsoft.ServiceBus.Messaging.Channels.ReconnectBindingElement.ReconnectChannelFactory`1.RequestSessionChannel.EndRequest(IAsyncResult result)
            at Microsoft.ServiceBus.Messaging.Sbmp.RedirectBindingElement.RedirectContainerChannelFactory`1.RedirectContainerSessionChannel.RequestAsyncResult.<>c__DisplayClass17.<GetAsyncSteps>b__a(RequestAsyncResult thisPtr, IAsyncResult r)
            at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.StepCallback(IAsyncResult result)
         Exception rethrown at [2]: 
            at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)
            at Microsoft.ServiceBus.Common.AsyncResult`1.End(IAsyncResult asyncResult)
            at Microsoft.ServiceBus.Messaging.Sbmp.RedirectBindingElement.RedirectContainerChannelFactory`1.RedirectContainerSessionChannel.EndRequest(IAsyncResult result)
            at Microsoft.ServiceBus.Messaging.Channels.ReconnectBindingElement.ReconnectChannelFactory`1.RequestSessionChannel.RequestAsyncResult.<GetAsyncSteps>b__4(RequestAsyncResult thisPtr, IAsyncResult r)
            at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.StepCallback(IAsyncResult result)
         Exception rethrown at [3]: 
            at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)
            at Microsoft.ServiceBus.Common.AsyncResult`1.End(IAsyncResult asyncResult)
            at Microsoft.ServiceBus.Messaging.Channels.ReconnectBindingElement.ReconnectChannelFactory`1.RequestSessionChannel.EndRequest(IAsyncResult result)
            at Microsoft.ServiceBus.Messaging.Sbmp.SbmpMessageReceiver.EndReceiveCommand(IAsyncResult result, IEnumerable`1& messages)
       InnerException: 

2 个答案:

答案 0 :(得分:2)

该错误很可能代表连接的某个段中的超时。这可能是您的客户端,天蓝色负载平衡器或实际托管消息队列的服务总线机器。

对于这种瞬态错误,建议添加重试机制。 This blog post对此有很好的指导。

答案 1 :(得分:0)

我同意实施重试策略 - 应该解决大多数瞬态错误。以下是微软关于该主题的非常好的文章:

Retry guidance for specific services

Service Bus messaging exceptions