私は一度だけ実行する必要がありますが、それは外部リソースに依存し、失敗する可能性がありますいくつかのコードを実行していますよ。イベントログにエラーが表示されるようにしたいが、ユーザーには表示させたくない。可能であれば、カスタムエラーページの使用を避けたいと思います。クリーンな方法
私は例外をキャッチし、イベントログに自分自身をそれを書くが、私は、私はasp.netのイベントソースの名前がどうなるか保証できないことを心配でした(それはフレームワークのバージョンに応じて変化するように見えます私は自分のイベントソースを作成することもできません。なぜなら、それには管理者権限が必要だからです。
私は現在の方に働いていることは(まだ動作しません)ハックのビットであり、それはこのようになりますアプローチは:
public void Init(HttpApplication context)
{
try
{
throw new Exception("test"); // This is where the code that errors would go
}
catch (Exception ex)
{
HttpContext.Current.Application.Add("CompilationFailed", ex);
}
}
private void context_BeginRequest(object sender, EventArgs e)
{
if (HttpContext.Current.Application.AllKeys.Contains("CompilationFailed"))
{
// It failed on Init - we can't throw an exception there so lets try it here
var origEx = (Exception)HttpContext.Current.Application["CompilationFailed"];
// Only ever do this once
HttpContext.Current.Application.Remove("CompilationFailed");
// This should just look like a normal page load to the user
// - it will be the first request to the site so we won't be
// interrupting any postbacks or anything
HttpContext.Current.Response.AddHeader("Location", "/");
HttpContext.Current.Response.StatusCode = 301;
try
{
HttpContext.Current.Response.End();
}
catch (ThreadAbortException ex)
{
throw origEx;
}
}
}
理想的には、私が本当に希望する(RecordExceptionです)メソッドが存在する場合は、そのIIS内に存在します。あなたはエラーが発生した場合に通知されるようにしたいが、ユーザーはそれについて知られたくないよう
EnterpriseLoggingLibraryはこのようなもののための素晴らしいです - データベースへの例外をログに記録することができ、Windowsイベントログ、テキストファイル、またはあなたが考えることができる何か。 –