misc.log

日常茶飯事とお仕事と

ASP.NET Webアプリを新環境に置いたら500.19 Internal Server Error

旧サーバーで動いていたものを、設定ファイルの接続先だけ書き換えて新環境に置いてみたのですが……なぜかエラーが。エラーはASP.NETのファイルのみならず、テスト用に作ったhtmlファイルの表示でも発生。

HTTP エラー 500.19 - Internal Server Error
ページに関する構成データが無効であるため、要求されたページにアクセスできません。

f:id:frontline:20160809133444p:plain

設定項目の何が原因か調べる

おかしく思い、設定ファイル(web.config)をシンプルなものに差し替えてみるととりあえずエラーが消える…。さらに原因を特定するために設定ファイルの項目を徐々に付け足していったところ、「configSections」タグの中にあった

  • 「section name="scriptResourceHandler"」で始まる設定
  • 「sectionGroup name="webServices"」で始まる設定

のブロックをを入れるとエラーになることが判明しました。

エラーの内容を特定する

エラーはこちらでいじれないサーバー上で起きていたことから、問題のWebアプリ一式をローカルの開発マシンに移し、IISでWebサイトを立ち上げて起動。アプリケーションプールを「Classic .NET AppPool」に設定すると問題なく動くのですが、「ASP.NET v4.0」に切り替えると下記のエラーが発生しました。

モジュール	IIS Web Core
通知	不明
ハンドラー	未定義です
エラー コード	0x800700b7
構成エラー	定義済みの 'system.web.extensions/scripting/scriptResourceHandler' セクションが重複しています

どうやら設定ファイルの記載内容がどこかで重複している様子。で、前述の部分を削除するとエラーは消えました。

どうやら.NET Frameworkのバージョンが原因らしい

この件についてはMSDNブログに言及がありました。

blogs.msdn.microsoft.com

.NET Framework 4.0を使う場合、IISが動くサーバーのmachine.configに同じ設定がすでに入っているので、それと重複してしまうとのこと。実際、自分のPCで探してみたらありました。

f:id:frontline:20160809140349p:plain

場所は、32bitのWindows 7の場合「C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config」です。というわけで、3.5で動いていたものを4.0の環境に置くときはこのあたりに注意する必要があるようです。