Visual Studio または Visual Web Developer を使用している SQL Server Compact を含む ASP.NET Web アプリケーションの配置: テスト環境としての IIS への配置 - 5/12

著者: Tom Dykstra

スターター プロジェクトのダウンロード

このチュートリアル シリーズでは、Visual Studio 2012 RC または Visual Studio Express 2012 RC for Web を使用して、SQL Server Compact データベースを含む ASP.NET Web アプリケーション プロジェクトを、配置 (発行) する方法について説明します。 Web 発行の更新をインストールすれば、Visual Studio 2010 を使用することもできます。 シリーズの概要については、シリーズの最初のチュートリアルを参照してください。

Visual Studio 2012 の RC リリース以降に導入された配置機能の紹介や、SQL Server Compact 以外の SQL Server エディションの配置方法、Azure App Service Web Apps へのデプロイ方法などを解説したチュートリアルは、「Visual Studio を使用した ASP.NET Web 配置」をご覧ください。

概要

このチュートリアルでは、ASP.NET Web アプリケーションをローカル コンピューター上の IIS に配置する方法について説明します。

通常、アプリケーションを配置する場合は、Visual Studio で実行してテストします。 既定では、これは Visual Studio 開発サーバー (Cassini とも呼ばれます) を使用していることを意味します。 Visual Studio 開発サーバーを使用すると、Visual Studio での開発中のテストが簡単になりますが、IIS とまったく同じようには機能しません。 結果的に、Visual Studio でテストするときにアプリケーションが正しく実行される可能性がありますが、ホスト環境の IIS に配置すると失敗します。

次の方法で、アプリケーションをより確実にテストできます。

  1. 開発中に Visual Studio でテストする場合は、Visual Studio 開発サーバーの代わりに IIS Express または完全な IIS を使用します。 通常、このメソッドは IIS でのサイトの実行方法をより正確にエミュレートします。 ただし、この方法では、配置プロセスをテストしたり、配置プロセスの結果が正しく実行されることを検証したりすることはありません。
  2. 後で運用環境に配置するときに使用するプロセスと同じプロセスを使用して、アプリケーションを開発用コンピューター上の IIS に配置します。 このメソッドは、IIS でアプリケーションが正しく実行されることを検証するだけでなく、配置プロセスを検証します。
  3. 運用環境にできるだけ近いテスト環境にアプリケーションを配置してください。 これらのチュートリアルの運用環境はサードパーティーのホスティング プロバイダーであるため、テスト環境として理想的なのはホスティング プロバイダーによる 2 番目のアカウントです。 この 2 番目のアカウントはテストにのみ使用しますが、運用アカウントと同じ方法で設定されます。

このチュートリアルでは、オプション 2 のステップを示します。 オプション 3 のガイダンスは、運用環境への配置に関するチュートリアルの最後に記載されており、このチュートリアルの最後には、オプション 1 のリソースへのリンクがあります。

リマインダー: チュートリアルの間、エラー メッセージが表示されたり、うまくいかないことがある場合は、必ずトラブルシューティングに関するページを確認してください。

中程度の信頼で実行するようにアプリケーションを構成する

IIS をインストールして配置する前に、サイトが一般的な共有ホスティング環境と同じように実行されるように、Web.config ファイルの設定を変更します。

ホスティング プロバイダーは通常、"中程度の信頼" で Web サイトを実行します。つまり、いくつかのことが実行を許可されていません。 たとえば、アプリケーション コードは Windows レジストリにアクセスできません。また、アプリケーションのフォルダー階層の外部にあるファイルの読み取りまたは書き込みを行うことはできません。 既定では、アプリケーションはローカル コンピューター上で "高い信頼" で実行されます。つまり、運用環境に配置すると失敗することが、アプリケーションでできる可能性があります。 そのため、テスト環境に運用環境をより正確に反映させるために、中程度の信頼で実行するようにアプリケーションを構成します。

この例に示すように、アプリケーション Web.config ファイルで、system.web 要素に trust 要素を追加します。

<configuration>
  <!-- Settings -->
  <system.web>
    <trust level="Medium" />
    <!-- Settings -->
  </system.web>
</configuration>

アプリケーションは、ローカル コンピューター上でも IIS で中程度の信頼で実行されるようになります。 この設定を使用すると、運用環境では失敗することをアプリケーション コードが試行した場合にできるだけ早くキャッチできます。

Note

Entity Framework の Code First Migrations を使用している場合は、バージョン 5.0 以降がインストールされていることを確認してください。 Entity Framework バージョン 4.3 では、データベース スキーマを更新するには、移行に完全な信頼が必要です。

IIS と Web 配置をインストールする

開発用コンピューター上の IIS に配置するには、IIS と Web 配置がインストールされていることを確認します。 これらは、Windows 7 の既定の構成には含まれません。 IIS と Web 配置の両方を既にインストールしている場合は、次のセクションに進みます。

Web Platform Installer では IIS の推奨構成がインストールされ、必要に応じて IIS と Web 配置の前提条件が自動的にインストールされるため、Web Platform Installer を使用して IIS と Web 配置をインストールすることをお勧めします。

Web Platform Installer を実行して IIS と Web 配置をインストールするには、次のリンクを使用します。 IIS、Web 配置、またはいずれかの必要なコンポーネントを既にインストールしている場合、Web Platform Installer では、不足しているもののみがインストールされます。

既定のアプリケーション プールを .NET 4 に設定する

IIS をインストールしたら、IIS マネージャーを実行して、.NET Framework バージョン 4 が既定のアプリケーション プールに割り当てられていることを確認します。

Windows の[スタート] メニューから [ファイル名を指定して実行] を選択し、「inetmgr」と入力して、[OK] をクリックします。 ([ファイル名を指定して実行] のコマンドが [スタート] メニューにない場合は、Windows キーと R キーを押すと開きます。または、タスク バーを右クリックし、[プロパティ] をクリックして、[スタート メニュー] タブを選択し、[カスタマイズ] をクリックし、[実行コマンド] を選択します。)

[接続] ペインで、サーバー ノードを展開し、[アプリケーション プール] を選択します。 [アプリケーション プール] ペインで、次の図のように、[DefaultAppPool] が .NET Framework バージョン 4 に割り当てられている場合は、次のセクションに進みます。

Inetmgr_showing_4.0_app_pools

2 つのアプリケーション プールのみが表示され、両方とも .NET Framework 2.0 に設定されている場合は、次のようにして IIS に ASP.NET 4 をインストールする必要があります。

  • Windows の [スタート] メニューの [コマンド プロンプト] を右クリックし、[管理者として実行] を選択して、コマンド プロンプト ウィンドウを開きます。 その後、次のコマンドを使用して aspnet_regiis.exe を実行し、ASP.NET 4 を IIS にインストールします。 (64 ビット システムでは、"Framework" を "Framework64" に置き換えます。)

    cd %windir%\Microsoft.NET\Framework\v4.0.30319
    aspnet_regiis.exe –iru
    

    aspnet_regiis_installing_ASP.NET_4

    このコマンドを実行すると、.NET Framework 4 用の新しいアプリケーション プールが作成されますが、既定のアプリケーション プールは 2.0 に設定されたままになります。 .NET 4 を対象とするアプリケーションをそのアプリケーション プールに配置しているため、アプリケーション プールを .NET 4 に変更する必要があります。

IIS マネージャーを閉じた場合は、もう一度実行し、サーバー ノードを展開し、[アプリケーション プール] をクリックして [アプリケーション プール] ペインをもう一度表示します。

[アプリケーション プール] ペインで、[DefaultAppPool] をクリックし、[アクション] ペインで [基本設定] をクリックします。

Inetmgr_selecting_Basic_Settings_for_app_pool

[アプリケーション プールの編集] ダイアログ ボックスで、[.NET Framework のバージョン][.NET Framework v4.0.30319 に変更し、[OK] をクリックします。

Selecting_.NET_4_for_DefaultAppPool

これで、IIS に発行する準備ができました。

IIS への発行

Visual Studio 2010 と Web 配置を使用して配置するには、次のようにいくつかの方法があります。

  • Visual Studio のワンクリック発行を使用する。
  • "展開パッケージ" を作成し、IIS マネージャーの UI を使用してインストールする。 展開パッケージは、IIS にサイトをインストールするために必要なすべてのファイルとメタデータを含む .zip ファイルで構成されます。
  • 展開パッケージを作成し、コマンド ラインを使用してインストールする。

配置タスクを自動化するように Visual Studio を設定するために前のチュートリアルで実行したプロセスは、これらのすべての方法に適用されます。 これらのチュートリアルでは、最初の方法を使用します。 展開パッケージの使用については、ASP.NET 配置コンテンツ マップに関する記事を参照してください。

発行する前に、Visual Studio を管理者モードで実行していることを確認します。 (Windows 7 の [スタート] メニューで、使用している Visual Studio のバージョンのアイコンを右クリックし、[管理者として実行] を選択します。)管理者モードは、ローカル コンピューター上の IIS に発行する場合にのみ必要です。

ソリューション エクスプローラーで、[ContosoUniversity] プロジェクト ([ContosoUniversity.DAL] プロジェクトではありません) を右クリックし、[発行] を選択します。

Web の発行 ウィザードが表示されます。

Publish_Web_wizard_Profile_tab

ドロップダウン リストの <新規...> を選択します。

[新しいプロファイル] ダイアログ ボックスで、「テスト」と入力し、[OK] をクリックします。

New_Profile_dialog_box

この名前は、前に作成した Web.Test.config 変換ファイルの中間ノードと同じです。 この対応関係により、このプロファイルを使用して発行するときに Web.Test.config 変換が適用されます。

ウィザードが自動的に [接続] タブに進みます。

[サービス URL] ボックスに「localhost」と入力します。

[サイト/アプリケーション] ボックスに、「既定の Web サイト/ContosoUniversity」と入力します。

[宛先 URL] ボックスに「http://localhost/ContosoUniversity」と入力します。

[宛先 URL] 設定は必要ありません。 Visual Studio でアプリの配置が完了すると、既定のブラウザーでこの URL が自動的に開きます。 配置後にブラウザーを自動的に開かないようにする場合は、このボックスを空白のままにします。

Publish_Web_wizard_Connection_tab_Test

[接続の検証] をクリックして、設定が正しいことと、ローカル コンピューター上の IIS に接続できることを確認します。

緑色のチェック マークは、接続が成功したことを示します。

Publish_Web_wizard_Connection_tab_validated

[次へ] をクリックして、[設定] タブに進みます。

[構成] ドロップダウン ボックスでは、配置するビルド構成を指定します。 既定値は Release であり、これが目的の値です。

[発行先の追加ファイルを削除する] チェックボックスはオフのままにします。 これが最初の配置であるため、移動先フォルダーにはまだファイルがありません。

[データベース] セクションで、[SchoolContext] の接続文字列ボックスに次の値を入力します。

Data Source=|DataDirectory|School-Prod.sdf

[この接続文字列を実行時に使用する] がオンになっているため、配置プロセスでは、配置された Web.config ファイルにこの接続文字列を格納します。

[SchoolContext][Code First Migrations の適用] も選択します。 このオプションをオンにすると、配置プロセスにより、MigrateDatabaseToLatestVersion 初期化子を指定するように、配置された Web.config ファイルが構成されます。 この初期化子は、アプリケーションが配置後に初めてデータベースにアクセスするときに、データベースを最新バージョンに自動的に更新します。

[DefaultConnection] の接続文字列ボックスに、次の値を入力します。

Data Source=|DataDirectory|aspnet-Prod.sdf

[データベースの更新] はオフのままにします。 メンバーシップ データベースは、App_Data の .sdf ファイルをコピーすることによって配置されます。この配置プロセスで、このデータベースに関する他の操作を行う必要はありません。

Publish_Web_wizard_Settings_tab_Test

[次へ] をクリックして、[プレビュー] タブに進みます。

[プレビュー] タブで、[プレビューの開始] を選択して、コピーされるファイルの一覧を表示します。

Publish_Web_wizard_Preview_tab_Test

Publish_Web_wizard_Preview_tab_Test_with_file_list

[発行] をクリックします。

Visual Studio が管理者モードではない場合、アクセス許可に関するエラーを示すエラー メッセージが表示されることがあります。 その場合は、Visual Studio を閉じ、管理者モードで開いて、もう一度発行してみてください。

Visual Studio が管理者モードの場合、[出力] ウィンドウに、ビルドと発行が成功したことが報告されます。

Output_window_publish_Test

ブラウザーが自動的に開き、ローカル コンピューター上の IIS で実行されている Contoso University ホーム ページが表示されます。

Screenshot of the Internet Explorer window, which is showing the Contoso University environment indicator is Test instead of Dev.

テスト環境でテストする

環境インジケーターが "(Dev)" ではなく "(Test)" を示すことを確認してください。これは、環境インジケーターの Web.config 変換が成功したことを示しています。

Screenshot of the Internet Explorer window, which shows the Contoso University environment indicator is Test instead of Dev.

Students ページを実行して、配置されたデータベースに学生が含まれないことを確認します。 このページを選択した場合、読み込みに数分かかることがあります。これは、Code First によってデータベースが作成され、Seed メソッドが実行されるためです (ホーム ページでは、アプリケーションがまだデータベースへのアクセスを試みていないため、この操作は行われませんでした)。

Students_page_Test

Instructors ページを実行し、Code First によってデータベースに講師データがシードされたことを確認します。

Instructors_page_Test

[Students] メニューから [Add Students] を選び、学生を追加してから、[Students] ページで新しい学生を表示して、データベースに正常に書き込めることを確認します。

Add_Students_page_Test

Students_page_with_new_student_Test

[Courses] メニューから [Update Credits] を選択します。 [Update Credits] ページには管理者アクセス許可が必要であるため、[Log In] ページが表示されます。 前に作成した管理者アカウントの資格情報 ("admin" と "Pas$w0rd") を入力します。 [Update Credits] ページが表示され、前のチュートリアルで作成した管理者アカウントがテスト環境に正しく配置されたことが確認されます。

Log_In_page_Test

Update_Credits_page_Test

プレースホルダー ファイルのみが含まれる Elmah フォルダーが存在することを確認します。

Elmah_folder_Test

Code First Migrations の自動 Web.config 変更を確認する

C:\inetpub\wwwroot\ContosoUniversity で、配置されたアプリケーションの Web.config ファイルを開くと、配置プロセスで、データベースを最新バージョンに自動的に更新するように Code First Migrations が構成された場所を確認できます。

Screenshot that highlights where the deployment process configured Code First Migrations to automatically update the database to the latest version.

配置プロセスでは、Code First Migrations でデータベース スキーマの更新のみに使用される新しい接続文字列も作成されました。

DatabasePublish_connection_string

この接続文字列の追加により、データベース スキーマの更新用に 1 つのユーザー カウントを指定し、アプリケーション データへのアクセス用に別のユーザー アカウントを指定できます。 たとえば、db_owner ロールを Code First Migrations に割り当て、db_datareader と db_datawriter のロールをアプリケーションに割り当てることができます。 これは、アプリケーション内の悪意のあるコードによってデータベース スキーマが変更されるのを防ぐ多層防御の一般的なパターンです (たとえば、悪意のあるコードによる変更は、SQL インジェクション攻撃が成功した場合に発生する可能性があります)。このパターンは、これらのチュートリアルでは使用されません。 これは SQL Server Compact には適用されず、このシリーズの後のチュートリアルで SQL Server に移行するときには適用されません。 Cytanium のサイトには、Cytanium で作成した SQL Server データベースにアクセスするためのユーザー アカウントが 1 つだけ用意されています。 ご自分のシナリオでこのパターンを実装できる場合は、次のステップを実行して実装できます。

  1. [Web 公開] ウィザードの [設定] タブで、データベース スキーマの完全な更新アクセス許可を持つユーザーを指定する接続文字列を入力し、[この接続文字列を実行時に使用する] チェック ボックスをオフにします。 配置された Web.config ファイルでは、これが接続文字列 DatabasePublish になります。
  2. 実行時にアプリケーションで使用する接続文字列の Web.config ファイル変換を作成します。

これで、開発用コンピューター上の IIS にアプリケーションが配置され、そこでのテストが完了しました。 これにより、配置プロセスによって、アプリケーションのコンテンツが適切な場所にコピーされたこと (配置したくないファイルを除外)、および配置時に Web 配置によって、IIS が正しく構成されたことが確認されます。 次のチュートリアルでは、まだ実行されていない配置タスク (Elmah フォルダーのフォルダー アクセス許可の設定) を見つけるもう 1 つのテストを実行します。

その他の情報

Visual Studio での IIS または IIS Express の実行については、次のリソースを参照してください。