私のAzureロールは、データベースから処理するものを取得します。インスタンスを保持し、System.Data.SqlClient.SqlConnection
定期的にSqlCommand
インスタンスを作成して、SQLクエリを実行します。
たまに(通常は数日に1回)クエリを実行するとSqlException
例外がトリガーされます
サービスでリクエストの処理中にエラーが発生しました。もう一度やり直してください。エラーコード40143。現在のコマンドで重大なエラーが発生しました。結果がある場合は、破棄する必要があります。
これはすでに何度も見てきましたが、コードがそれをキャッチしDispose()
、SqlConnection
インスタンスを呼び出してから、接続を再度開いてクエリを再試行します。後者は通常、別のSqlException
例外が発生します
タイムアウトが期限切れになりました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。
これは、SQLAzureサーバーが何らかの理由で応答しないか利用できないように見えます。
現在、私のコードは後者の例外をキャッチしていません。それは外部RoleEntryPoint.Run()
に伝播され、役割が再開されます。通常、再起動には約10分かかります。再起動が完了すると、問題は1日ほど解消されます。
役割を再開するのは好きではありません。しばらく時間がかかり、サービス機能が妨げられます。もっと賢いことをしたいのですが。
この問題に対処するための戦略は何でしょうか?クエリを数回、何回、どのような間隔で再試行する必要がありますか?私は何か他のことをすべきですか?いつあきらめて、役割を再開させますか?