2017-06-06 10 views
0

トピックキューにメッセージを送信しているときにOperationCanceledExceptionが発生しています(コードをAzure関数内から実行しています)。 私が使用しているバージョンは "WindowsAzure.ServiceBus": "4.1.1"(最新) です。このサービスバスでいくつかのメッセージが送信されているという負荷テストを行っているときにこの例外が発生していますトピック)。それは、ありませんサービスバスに送信するときにOperationCanceledExceptionが発生する

client.RetryPolicy = new RetryExponential(minBackoff: TimeSpan.FromSeconds(0.1), 
              maxBackoff: TimeSpan.FromSeconds(30), 
              maxRetryCount: 3); 

しかし、私は、これはデフォルトですでに行われていると思った: 私はとして再試行のメカニズムを使用するように言われたのですか?

ここにあなたの助けが必要でしょうか?なぜこの例外が発生しますか?これを解決するにはどうすればよいですか?ここで

は例外です:

Exception System.OperationCanceledException: The operation cannot be performed because the entity has been closed or aborted. ---> System.ServiceModel.CommunicationObjectAbortedException: Internal Server Error: The server did not provide a meaningful reply; this might be caused by a premature session shutdown. TrackingId:88386cb1-a4e6-42e2-a8e1-bad3a2403329, Timestamp:6/6/2017 7:55:23 AM 
    at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result) 
    at Microsoft.ServiceBus.Messaging.Sbmp.DuplexRequestBindingElement.DuplexRequestSessionChannel.EndRequest(IAsyncResult result) 
    at Microsoft.ServiceBus.Messaging.Channels.ReconnectBindingElement.ReconnectChannelFactory`1.RequestSessionChannel.RequestAsyncResult.<>c.<GetAsyncSteps>b__9_3(RequestAsyncResult thisPtr, IAsyncResult r) 
    at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.StepCallback(IAsyncResult result) 
--- End of stack trace from previous location where exception was thrown --- 
    at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result) 
    at Microsoft.ServiceBus.Messaging.Channels.ReconnectBindingElement.ReconnectChannelFactory`1.RequestSessionChannel.EndRequest(IAsyncResult result) 
    at Microsoft.ServiceBus.Messaging.Sbmp.RedirectBindingElement.RedirectContainerChannelFactory`1.RedirectContainerSessionChannel.RequestAsyncResult.<>c__DisplayClass8_1.<GetAsyncSteps>b__4(RequestAsyncResult thisPtr, IAsyncResult r) 
    at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.StepCallback(IAsyncResult result) 
--- End of stack trace from previous location where exception was thrown --- 
    at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result) 
    at Microsoft.ServiceBus.Messaging.Sbmp.RedirectBindingElement.RedirectContainerChannelFactory`1.RedirectContainerSessionChannel.EndRequest(IAsyncResult result) 
    at Microsoft.ServiceBus.Messaging.Channels.ReconnectBindingElement.ReconnectChannelFactory`1.RequestSessionChannel.RequestAsyncResult.<>c.<GetAsyncSteps>b__9_3(RequestAsyncResult thisPtr, IAsyncResult r) 
    at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.StepCallback(IAsyncResult result) 
--- End of stack trace from previous location where exception was thrown --- 
    at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result) 
    at Microsoft.ServiceBus.Messaging.Channels.ReconnectBindingElement.ReconnectChannelFactory`1.RequestSessionChannel.EndRequest(IAsyncResult result) 
    at Microsoft.ServiceBus.Messaging.Sbmp.SbmpTransactionalAsyncResult`1.<>c.<GetAsyncSteps>b__18_3(TIteratorAsyncResult thisPtr, IAsyncResult a) 
    at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.StepCallback(IAsyncResult result) 
--- End of stack trace from previous location where exception was thrown --- 
    at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result) 
    at Microsoft.ServiceBus.Messaging.Sbmp.SbmpMessageSender.EndSendCommand(IAsyncResult result) 
    --- End of inner exception stack trace --- 
    at Microsoft.ServiceBus.Messaging.Sbmp.SbmpMessageSender.EndSendCommand(IAsyncResult result) 
    at Microsoft.ServiceBus.Messaging.Sbmp.SbmpMessageSender.OnEndSend(IAsyncResult result) 
    at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.StepCallback(IAsyncResult result) 
--- End of stack trace from previous location where exception was thrown --- 
    at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result) 
    at Microsoft.ServiceBus.Messaging.MessageSender.OnSend(TrackingContext trackingContext, IEnumerable`1 messages, TimeSpan timeout) 
    at Microsoft.ServiceBus.Messaging.MessageSender.Send(TrackingContext trackingContext, IEnumerable`1 messages, TimeSpan timeout) 

答えて

1

再試行ポリシーは、デフォルトではASBクライアントで有効になっています。あなたはそれを自分で行うことはできません。あなたが得る

例外がOperationCanceledExceptionあるとマニュアルによると:「ユーザーコーディングエラー」として分類されて

Retry will not help.

。例外スタックトレースを見ると、これは時の動作を送信し、エラーが、私は、これはユーザーのコード・エラーが、ブローカー側で行われたものではありませんかなり確信している

Internal Server Error: The server did not provide a meaningful reply; this might be caused by a premature session shutdown. TrackingId:88386cb1-a4e6-42e2-a8e1-bad3a2403329...

で起こっています。このエラーが表示されたTrackingIdには、少なくともそのコマンドが失敗したときにブローカで何が起こったのかを知るために、Microsoftのサポートケースを開くことができます。

編集

一方私は、追加の再試行/バックオフ・ロジックを使用して操作を実装することをお勧めだろうか。タイトなループで再試行せず、クライアントのRetryPolicyに依存しないもの。

関連する問題