特定の状況でSerializationExceptionをスローするASP.NET Web API Webサービスがあります。問題は、サーバー側でこの例外をトラップしてログに記録できないことです。クライアント側のHTTP応答の本体に表示される唯一の場所です。Web APIでSerializationExceptionをトラップするにはどうすればよいですか?
私はに記載されているようにExceptionFilterAttribute
を登録し、コントローラ内で例外をスローすると正常に動作することを確認しました。残念ながら、SerializationExceptionは応答中(コントローラの後)にスローされ、ASP.NETによって完全に呑み込まれているようです。私もGlobal.asax.csにApplication_Error()
をフックしようとしましたが、そこにも表示されませんでした。
Web APIの応答中にSerializationException例外をキャッチするにはどうすればよいですか?
完璧!わずかな最適化で、スレッドをブロックしないように、私は非同期で待っていたLoadIntoBufferAsyncを作った。 – Mike
@Mikeおそらく、IOを実行していない可能性があるため、LoadIntoBufferAsyncは、シリアル化プロセス中にメモリ内のバイトを移動するだけです。したがって、非同期にすることで、あるスレッドプールスレッドから別のスレッドプールスレッドに切り替えるだけです。これは実際にperfに悪影響を与えます。しかし、あなたのフォーマッタがIOを待ってブロックされることを知っていれば、asyncが役に立ちます。 –
私は間違いなくWait vs awaitの専門家ではありませんが、私の理解は、タスクが別のスレッドで実行されている間、Wait()が現在のスレッドをブロックすることです。また、現在のスレッドをブロックしますが、非同期にスレッドを解放して他の作業を行い、タスクが完了した時点で再開します。両方のケースでスレッドスイッチが必要なので、パフォーマンスは似ていますが、非同期のアプローチでは(わずかに)よりスケーラビリティが向上します。私が言ったように、これに関する私の知識は不十分ですので、おそらくスティーブン・トゥーブに尋ねるべきです。 :) – Mike