最近、運用 Web サイトに asp.net Web API を公開しました。本番環境では、1 日に 1 回、未処理の例外により Web サイト プロセスがリサイクルされます。
未処理の例外が発生し、プロセスが終了しました。アプリケーション ID: /LM/W3SVC/2/ROOT/oasis プロセス ID: 9236 例外: System.AggregateException メッセージ: タスクの待機中またはその Exception プロパティへのアクセスによって、タスクの例外が確認されませんでした。その結果、監視されていない例外がファイナライザー スレッドによって再スローされました。StackTrace: System.Threading.Tasks.TaskExceptionHolder.Finalize() で InnerException: System.Web.HttpException メッセージ: リモート ホストが接続を閉じました。エラー コードは 0x800704CD です。StackTrace: System.Web.Http.WebHost.HttpControllerHandler.EndProcessRequest(IAsyncResult 結果) で System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() で System.Web.HttpApplication.ExecuteStep(IExecutionStep ステップ、ブール値&
この例外は、プログラム コードではなく、Web API 内部で発生しているようです。これにより多数のユーザーのセッションが破壊されるため、このような例外がプロセスをリサイクルするのを防ぐ必要があります。
この例外を処理する1つの方法は、次を使用することであることを理解しています:
TaskScheduler.UnobservedTaskException += (sender, e) =>
{
McpsEventLog.PostException(e.Exception, "webapicontroller");
e.SetObserved();
};
しかし、これが機能するためには、このコードをどこに置くことができますか? Web APIコントローラーのどこかに?または、global.asax で。UnobserveredTaskException を asp.net Web Api レスト サービスに実装する方法を知っている人はいますか?