そのため、Entity Framework の "Any" トランザクション中に Win32Exception を受け取りました。db マシンはオフラインなので、当然のことです。これは監視アプリなので、マシンが使用できないことをログに記録したいのですが、エラーをキャッチしていません。
エラーは次のとおりです:(Elmahによって報告されました)
System.ComponentModel.Win32Exception ネットワーク パスが見つかりませんでした
System.Data.SqlClient.SqlException (0x80131904): SQL Server への接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。(プロバイダー: 名前付きパイプ プロバイダー、エラー: 40 - SQL Server への接続を開けませんでした) ---> System.ComponentModel.Win32Exception (0x80004005): System.Data.SqlClient.SqlInternalConnection.OnError でネットワーク パスが見つかりませんでした ( SqlException 例外、ブール値の breakConnection、Action`1 wrapCloseInAction)
わかりましたので、ここに私の(疑似)コードがあります:
if(Monitor.TryEnter(Variables))
try
{
foreach(var thing in things)
{
try
{
using(var ctx = new context())
{
Do Stuff...
if(thing.Any()) <-- Error
Do more stuff... like look for problems.
}
}
catch(Win32Exception)
{
Add exception to list of problems.;
}
catch(exception)
{
throw; //I was just seeing if this would help, it didn't
}
}
Return list of problems
}
catch(Exception ex)
{
Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(ex));
}
finally
{
Monitor.Exit(variables)
}
したがって、Win32Exception がキャッチされる必要があることがおわかりいただけると思いますが、そうではありません。Elmah が報告しています。データベースで見つかったエラーは、適切に特定され、報告されています。この Win32Exception が発生するまではすべて機能し、キャッチを無視しているようです。