【トラブル】【ASP.NET MVC】【IIS】Response.HeadersからPlatformNotSupportedExceptionが発生する

■ はじめに

 * 以下「サンプル:エラー発生時」を、Visual Studio2012で実装したら、
   例外「PlatformNotSupportedException」が発生した

■ エラー内容

System.PlatformNotSupportedException: This operation requires IIS integrated pipeline mode.
# 【日本語訳】この操作を実行するには、IIS統合パイプラインモードが必要です

■ サンプル

エラー発生時
Public Class MvcApplication
    Inherits System.Web.HttpApplication

    Protected Sub OnPreSendRequestHeaders(sender As Object, e As EventArgs)
        Me.Response.Headers.Remove("Server") ' ★ここで例外が起こる★
        Me.Response.Headers.Remove("X-AspNet-Version")
        Me.Response.Headers.Remove("X-AspNetMvc-Version")
    End Sub

    ' ・・・略・・・
End Class

■ 発生環境

 * Visual Studio2012 / ASP.NET 開発サーバー(Cassini)
 * .NET4.5

■ 原因

 例外の説明文からもわかるが、
上記「発生した環境」から下記「API仕様」の条件「.NET Framework 3.0」を満たしているので
残りの条件「IIS 7.0 統合パイプラインのモード」でなかったことが原因。

 もっと突き詰めると、Webサーバとして、ASP.NET 開発サーバー(Cassini)を使用していたのだが
ASP.NET 開発サーバーは、クラッシックモード相当するらしくので、このことが原因。
http://surferonwww.info/BlogEngine/post/2011/11/18/ASPNET-development-server-and-IIS.aspx

API仕様

https://msdn.microsoft.com/ja-jp/library/system.web.httpresponse.headers.aspx
より抜粋

Headers プロパティはでのみサポート、 IIS 7.0 統合パイプラインのモードと、
少なくとも、.NET Framework 3.0。アクセスしようとする、 
Headers プロパティと、これら 2 つの条件のいずれかが満たされなかった場合、
PlatformNotSupportedException がスローされます。

■ 解決方法

解決案1

 * 開発環境と本番環境を区別可能なフラグなどを設けて、開発環境では実行しないようにする

解決案2

 * 使用するサーバを、ASP.NET 開発サーバーではなく、ローカルIIS/IIS Expressに置き換える
 * 変更方法は、プロジェクトを右クリックし、[プロパティ]-[Web]を選択し、「IIS Express」を選ぶだけ。
   (以下のサイトを参照のこと。)
http://www.ilovex.co.jp/blog/system/net/aspnetvisualstudio.html

■ 補足

 * Visual Studio2015だと、デフォルトのWebサーバーは、IIS Expressになっており
   ASP.NET 開発サーバー(Cassini)はなくなっている模様。