我遵循这个实现从服务总线: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:TFSDEVAzureAzure.DevelopmentAzure.WorkerCommandProcessorWorkerRole.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:
该错误很可能表示连接的某个段超时。这可能是您的客户机、azure负载平衡器或实际托管消息传递队列的服务总线机器。
对于这种暂时性错误,建议添加重试机制。
我同意实现重试策略-这应该修复大多数瞬态错误。这里是非常好的微软文章的主题:
特定服务的重试指导
服务总线消息异常