ExpressWeb でASP.NET アプリのインストールに注意!
2010年7月22日この件につては、2011年10月12日に修正が完了済だそうです。
Windows レンタルサーバー ExpressWeb は、 ディスク容量 30GB、マルチドメイン/サブドメイン無制限、メールアドレス無制限で、ASP.NET 4.0に対応し、信頼レベル (trust level)も Full Trust で、SQL Server のデータベースも3個提供されデータ領域が300MBあり、それでいて、年額3150円の超お得なレンタルサーバーです。
ExpressWeb で DotNetNuke、Umbraco、N2CMS 等の ASP.NET アプリケーションをインストールして、うまく動作しなかったという経験はありませんか。自分も悪戦苦闘してしまいました。悪戦苦闘の結果、ASP.NET のアプリケーションを動作させる場合に注意しないといけないポイントが2点あるということがわかりました。初心者には非常にわかりづらい問題点なので、長時間悩んだ末に放置している人もいるのではないかと思ってメモを公開します。この問題点がわかってからは、ASP.NET のアプリケーションも快調に動作するようになりました。ExpressWeb は、日本では非常に少ない Windows レンタルサーバーで、海外のホスティングと比較しても十分にお得なレンタルサーバなので、このメモを参考にして、有効に活用する人が増えてほしいと思っています。なお、この問題は、WordPress 等のPHP で作成されているアプリケーションには無関係です。
1.machineKey の設定が必要
・現象及び原因
突然「アプリケーションでサーバー エラーが発生しました。」というメッセージがでるランタイムエラーが発生します。customErrors の mode を “Off” にすると、「Web Farm またはクラスタによってホストされている場合、<machineKey> 構成が同一の validationKey および検証アルゴリズムを指定していることを確認してください。」というエラーメッセージが出るので原因がわかります。そして、http://webboar.com/ で自分の Domain を調べて理由は納得しました。同一 IP アドレスを約 35000 ドメインが使っていました。machine.config で対応できるのであれば、個々のアプリケーションでいちいち設定しなくてもいいようにしてほしいものです。(2010/1/5追加 サイト毎に machineKey を設定した方が、セキュリティ的に望ましいようなので、各サイトのルートディレクトリのweb.configで以下のように、<machineKey>タグを設定するようにします。)
・対応策
<machineKey>タグを以下のように web.config ファイルの <system.web> タグに記述してやれば解消します。なお、<machineKey>タグは、http://aspnetresources.com/tools/keycreator.aspx で作成することができます。
<system.web>
…
<machineKey validationKey="xxxx" decryptionKey="xxxx" validation="SHA1" decryption="AES" />
</system.web>
2.Web.config の Handler セクションが削除されることがある
・現象及び原因
統合モードの場合に影響があります。といっても、ASP.NET 2.0 の統合モードが現在のASP.NETのアプリケーションの主流だし、ExpressWebでもデフォルトの設定です。「アプリケーションギャラリー」からアプリケーションをインストールした場合と下の図のように「Web サイトプロパティ」や 「仮想ディレクトリプロパティ」で、「ホームフォルダー」、「エクステンション」、「カスタムエラー」等のタブ(すべて確認したわけではありませんがほとんどのタブです)で「更新」ボタンをクリックした場合に発生します。
上の操作をすると、Web.config ファイルで、system.weServer セクションの handlers セクション(下の図の赤枠で囲んだ部分)が削除されてしまいます。このため、アプリケーションによっては、404 エラーが発生したり、javascript が正常に動作しなくなったりします。アプリケーションギャラリーからインストールすれば、正常に動作するものだと思い込みがちですが、アプリケーションのそれも一部だけが正常に動作しないので、結構いやらしいエラーです。これは、DotNetPanel のバグかそれの設定ミスだと思うので早くなおしてほしいと思っています。(2010/1/5 最近テストをするとかなり改善されていました。追加 アプリケーションギャラリーを利用したインストールは正常に動作するようになっています。また、バグが発生するケースはかなり少なくなっていますが、ルートディレクトリの場合は削除されるケースがあります。Web.config ファイルは必ずバックアップしておくようにしましょう。)
・対応策
Web.config に <handlers>セクションを追加します。<handlers>セクションの内容はアプリケーションによってことなるので、自分でインストールした場合は、インストール完了後にweb.config をバックアップしておくようにします。また、アプリケーションギャラリーからインストールした場合は、Web Platform Installer を使って該当ファイルをダウンロードするか、ローカルでインストールして、Web.config ファイルを取得し <handlers> セクションの内容を確認して追加するのが確実です。