開発環境でGlobal.asaxのApplication_Errorでエラー処理を実装して正常に動作しましたが、本番環境で動作しません。いろいろ試したら、IIS7以降のWebSiteの設定について、Web Applicationのアプリケーションプールを「Classic .NET AppPool」に切替すると問題が解消しました。
さらに試したら、実際そのアプリケーションプールの設定の「パイプラインモード」という設定を「クラシック」にすれば問題解消します。
このようにGlobal.asaxのApplication_Errorでアプリケーション全体のエラーを処理することができます。
public class Global : System.Web.HttpApplication { protected void Application_Error(object sender, EventArgs e) { Exception ex = Server.GetLastError(); if (ex is HttpUnhandledException) { // ... } } }