Kobarin's Development Blog

C#やASP.NET、公開APIなどについての記録です。

Windows7からWindows10へのアップグレード後にIISサイトが動かない問題

標題のとおりですが、開発用PCのOSアップグレードした所、サイトが動きません。まぁ、OSアップグレードしてWebサーバーがそのまま動いてくれるとは到底思えないので、常識的に考えて想定内の出来事ですが。

症状

さて、とりあえず症状から。
ブラウザでサイトを開くと、以下の503エラーが現れます。

Service Unavailable
HTTP Error 503. The service is unavailable.

原因

当然これだけでは原因がわからないので、イベントログを開きます。
イベントビューア → 「Windowsログ」→「システム」を開くと、最新のエラーに5002が見つかりました(抜粋)。

ログの名前:         System
ソース:           Microsoft-Windows-WAS
イベント ID:       5002
説明:
アプリケーション プールを提供しているプロセス内での一連のエラーのため、アプリケーション プール '(アプリケーションプール名)' は自動的に無効になっています。

IIS Managerを開き、指摘されているアプリケーションプールを確認すると「停止」になっているので「開始」をして再度サイトをブラウザで開くとまた「停止」されます。どうやら何かの原因で「開始」できないようです。
まぁよくわからないので、その直前のエラー5139を開きます。

ログの名前:         System
ソース:           Microsoft-Windows-WAS
イベント ID:       5139
説明:
アプリケーション プール '(アプリケーションプール名)' に使われているワーカー プロセス '2888' のプロトコル 'http' に対するリスナー チャネルはリスナー チャネル エラーを報告しました。データ フィールドにはエラー番号が含まれています。

意味が分かりません…。エラー番号の「5139」を調べると、日本語サイトは見つかりませんが、英語フォーラムで質問している人がいて、回答者は「authentication(認証)」が原因であるような事を言っていますが、サイトのアクセス権は以前と変わらないため、これが原因とは考えにくいです。

ただアプリケーションプールを確認中に気になった点として、各々のアプリケーションプールが「どのユーザーとして実行するか」を示す「プロセスモデル」の「ID」があります。アプリケーションプールの右クリックメニューから「詳細設定」を開くと下図のウィンドウが開きます。

f:id:fskkoba:20150925101819j:plain

赤枠の箇所が全て「NetworkService」になっていましたが、通常は「ApplicationPoolIdentity」らしいので、試験的に変更してみます。

最初の試練「HTTP 503 Error」はクリア

すると冒頭の503エラーはなくなりました。
しかしこれで全て解決…というわけにはいかず、今度はASP.NET側でのエラー画面です(すいません、スクショもエラーメッセージもメモし忘れました)。

次の試練「Rewrite」

システムのイベントログからは有益な情報が見つからないため「Application」イベントを探ってみたところ、気になるエラーを発見。

モジュール DLL C:\WINDOWS\system32\inetsrv\rewrite.dll を読み込めませんでした。このデータはエラーです。

対応

rewrite(URL書き換えモジュール)かぁ…確かに怪しい。2.0のままバージョンアップもされていないし、今までも結構やらかしてくれてます。
上記メッセージを読む限り、アップグレード時に消えちゃったのかな?と思い、エクスプローラーでinetsvrフォルダに移動してみたところ「rewrite.dll」があるんです。無いはずのrewrite.dllが、そこにあるんです。エラーメッセージ、奥が深いです。

とりあえず再インストールすれば適当に解決するかな?と思い、一度rewriteをアンインストールし、Web Platform Installerを立ち上げてrewriteをインストール(「プログラムと機能」からrewriteを選択し右クリックから「修復」でもOKかも)…が、「rewriteは、IIS7.0以降にインストール可能です」のメッセージが現れます。
「いや、Windows10なんでIIS10ってば。10なんだから”7以降”でしょ??」と抗議したいところですが、いかに理不尽な要求でも機械が相手なのでこちらが解決しなければなりません。

推測ですが、おそらく「IIS7以降」というのはおそらく8とか9あたりまでの事で、10は新し過ぎて理解できないのかもしれません…と勝手に解釈。
IIS10用のrewrite.dllも探しましたが見つからないので、「いいや、とりあえずアンインストールはしたんだから、サイトを開いて確認しよう」という事で、Firefoxで実行。

結果

無事、実行できました!
…しかし、URL書き換えはどうなるんだろう?まさか標準で備わったとか?なわけないか。次回以降、調べてみたいと思います。