Visual Studio を使用した ASP.NET の Web 配置: フォルダーのアクセス許可の設定
著者: Tom Dykstra
このチュートリアル シリーズでは、Visual Studio 2012 または Visual Studio 2010 を使用して、ASP.NET Web アプリケーションを Azure App Service Web Apps またはサードパーティのホスティング プロバイダーに配置 (発行) する方法について説明します。 このシリーズについては、シリーズの最初のチュートリアルをご覧ください。
概要
このチュートリアルでは、アプリケーションで Elmah フォルダーにログ ファイルを作成できるように、配置された Web サイトでそのフォルダーに対するフォルダー アクセス許可を設定します。
Visual Studio 開発サーバー (Cassini) または IIS Express を使って Visual Studio で Web アプリケーションをテストするとき、アプリケーションはユーザーの ID で実行されます。 通常、ユーザーは開発用コンピューターの管理者であり、すべてのフォルダーのすべてのファイルに対して何でも行うことができる完全な権限を持っています。 ただし、アプリケーションが IIS で実行されるときは、サイトが割り当てられているアプリケーション プールに対して定義された ID で実行されます。 これは通常、アクセス許可が制限されているシステム定義のアカウントです。 既定では、Web アプリケーションのファイルとフォルダーに対する読み取りと実行のアクセス許可はありますが、書き込みアクセス権はありません。
このため、アプリケーションでファイルを作成または更新する場合に問題になりますが、これは Web アプリケーションで一般に必要なことです。 Contoso University アプリケーションで、Elmah はエラーの詳細を保存するため、Elmah フォルダーに XML ファイルを作成します。 Elmah のようなものを使わない場合でも、サイトによっては、ユーザーがファイルをアップロードしたり、サイト内のフォルダーにデータを書き込む他のタスクを実行したりできる場合があります。
注意: チュートリアルを行っていて、エラー メッセージが表示されたり、うまくいかない場合は、必ずトラブルシューティングに関するページを確認してください。
エラー ログとレポートをテストする
アプリケーションが (Visual Studio でテストしたときは動作したのに) IIS では正しく動作しない理由を調べるには、通常 Elmah によってログされるエラーを発生させてから、Elmah のエラー ログを開いて詳細を確認できます。 Elmah が XML ファイルを作成してエラーの詳細を格納できなかった場合、空のエラー レポートが表示されます。
ブラウザーを開いて http://localhost/ContosoUniversity
に移動し、Studentsxxx.aspx のような無効な URL を要求します。 Web.config ファイルでの customErrors
の設定が "RemoteOnly" であり、ローカル環境で IIS を実行しているため、GenericErrorPage.aspx ページの代わりにシステム生成のエラー ページが表示されます。
次に、Elmah.axd を実行してエラー レポートを表示します。 管理者アカウントの資格情報 ("admin" と "devpwd") を使ってログインすると、Elmah が Elmah フォルダーに XML ファイルを作成できなかったため、空のエラー ログ ページが表示されます。
Elmah フォルダーに対する書き込みアクセス許可を設定する
フォルダーのアクセス許可の設定は、手動で行うことも、配置プロセスの自動部分にすることもできます。 自動で行うには MSBuild の複雑なコードが必要であり、これを行う必要があるのは初めて配置するときだけなので、以下の手順では手動で行う方法を示します。 (配置プロセスのこの部分を行う方法については、Web 発行でのフォルダー アクセス許可の設定に関する Sayed Hashimi のブログをご覧ください)。
エクスプローラーで C:\inetpub\wwwroot\ContosoUniversity に移動します。 Elmah フォルダーを右クリックして [プロパティ] を選び、[セキュリティ] タブを選びます。
編集 をクリックします。
[Elmah のアクセス許可] ダイアログ ボックスで DefaultAppPool を選び、[許可] 列の [書き込み] チェック ボックスをオンにます。
([グループ名またはユーザー名] の一覧に DefaultAppPool が表示されない場合は、このチュートリアルで指定したものとは異なる方法を使って、コンピューターに IIS と ASP.NET 4 を設定した可能性があります。その場合は、Contoso University アプリケーションに割り当てられているアプリケーション プールで使われている ID を確認して、その ID に書き込みアクセス許可を付与します。このチュートリアルの最後にあるアプリケーション プールの ID に関するリンクを参照してください。)両方のダイアログ ボックスで [OK] をクリックします。
エラー ログとレポートを再テストする
同じ方法 (無効な URL を要求する) でエラーをもう一度発生させてテストし、[エラー ログ] ページを実行します。 今回は、エラーがページに表示されます。
まとめ
これで、ローカル コンピューター上の IIS で Contoso University を正しく動作させるために必要なすべてのタスクが完了しました。 次のチュートリアルでは、サイトを Azure に配置することで、一般に公開します。
詳細
この例では、Elmah がログ ファイルを保存できなかった理由はかなり明白でした。 問題の原因がそれほど明らかでない場合は、IIS トレースを使用できます。IIS.net のサイトの「IIS 7 でトレースを使用して失敗した要求のトラブルシューティングを行う」をご覧ください。
アプリケーション プールの ID にアクセス許可を付与する方法について詳しくは、IIS.net のサイトの「アプリケーション プール ID」と「ファイル システム ACL を使用して IIS のコンテンツをセキュリティで保護する」をご覧ください。