ここでは奇妙なエラーがあります。 Entity Framework 6.2を使用しているASP.NET 4.6アプリケーションでは、SQL Azureデータベースにアクセスするときに「ログインが失敗しました」というメッセージが表示されます。エラーの原因は、Azureの階層を切り替えることです。なぜ私はエラーがキャッチされていないのですか?私たちが持っているすべてのSQL操作はtry ... catchブロック内にあります。エラーはブロックから脱落し、アプリケーションがクラッシュする直前にGlobals.asaxによってキャッチされます。 私たちは、私はそれを理解して、最初のエラーから少なくとも70秒間何もSQLの実行を10回再試行する、未処理の例外エラー - ユーザーのログインに失敗しました
SetExecutionStrategy("System.Data.SqlClient", Function() New SqlServer.SqlAzureExecutionStrategy(10, TimeSpan.FromSeconds(7)))
を持っています。マイクロソフトの技術サポートによれば、まだSQL Azureに接続していないため、これは関与していません。 ConnectRetryCountと接続文字列の間隔は、サーバーと通信しているため適用されません。サーバーはちょうど、「あなたがそこにいることは知っていますが、私はあなたを入れるつもりはありません!」と言っています。 MSテクニカルサポートによれば、これを回避する唯一の方法は、私たちのすべてのSQLコマンドをtry ... catchブロックでブロックすることです。それだけで落ちて、アプリをクラッシュさせる!
globals.asaxで再試行できません。その時点で既にクラッシュしています。 MSによると、コンテキストでエラーをトラップしてそこから再試行する方法はありません。では、解決策は何ですか? 「アプリをクラッシュさせてページをリフレッシュさせてください」以外の答えが必要です。
ページが数秒後にリフレッシュされると、すべて正常です。エラーはなく、問題はありません。エラーを投げるコードの行のいずれかの
例:
MapTo = ctx.BrowserMaps.FirstOrDefault(Function(x) code.Contains(x.NameOrUserAgent))
それは本当に非常に単純です。このコードブロックが頻繁に呼び出されるため、このコードブロックは多く発生します。どの行が使用されていても、EF内での接続が失敗するため、実際のSQL要求は無関係です。
これは多かれ少なかれ答えです。このケースでは、モデルのコンストラクタにtry.catchを配置することで、再試行ロジックをいくつか設定することができました。データベースのログインを検討中です。ありがとうございます。 –