Quantcast
Channel: プログラム の個人的なメモ
Viewing all articles
Browse latest Browse all 860

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

$
0
0

はじめに

 * 以下「サンプル:エラー発生時」を、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)はなくなっている模様。

関連記事

Visual Studio上で確認用のWebサーバについて

http://blogs.yahoo.co.jp/dk521123/35871893.html

Viewing all articles
Browse latest Browse all 860

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>