チュートリアル : IIS 7.0 での ASP.NET アプリケーションの構成
更新 : 2007 年 11 月
ASP.NET Web アプリケーションを IIS 7.0 でホストする場合、さまざまな方法でそのアプリケーションの構成を設定することができます。たとえば、次のような方法があります。
IIS マネージャを使用する。詳細については、「方法 : IIS マネージャのオープン」および「IIS 7.0 Beta: Internet Information Services (IIS) Manager」を参照してください。
Web.config ファイルを直接編集する。Visual Studio または Visual Web Developer で、あるいはテキスト編集プログラムを使用してこれを行います。
IIS 7.0 コマンド ライン ツール (Appcmd.exe) を使用する。このユーティリティを使用すると、IIS の構成設定と Web アプリケーションの構成設定を指定できます。詳細については、「IIS 7.0 Beta: IIS 7.0 Command-Line Tool」を参照してください。
WMI (Windows Management Instrumentation) を使用する。IIS 7.0 WMI プロバイダの WebAdministration 名前空間にはクラスおよびメソッドが含まれており、これらを使用すると、Web サイト、Web アプリケーション、および関連するオブジェクトおよびプロパティの管理タスクのためのスクリプトを作成できます。詳細については、「IIS 7.0 Beta: WMI」を参照してください。
IIS 7.0 が備えているモジュール アーキテクチャにより、Web サーバーの機能をどのモジュールで構成するか指定できます。IIS 7.0 をインストールした時点では、多くのモジュールは既定で無効になっています。ASP.NET Web サイトを操作するとき、場合によっては次のモジュールを有効にする必要があります。
[IIS 6 と互換性のある管理] モジュール。このモジュールにより、Visual Studio はメタベース呼び出しを使用して IIS 7.0 構成ストアとやり取りできます。
Windows 認証モジュール。このモジュールを使用すると、Visual Studio で Web アプリケーションをデバッグできます。
詳細については、「Windows Vista での IIS 7.0 および Visual Studio を使用した Web アプリケーションの実行」および「Windows Server 2008 での IIS 7.0 および Visual Studio を使用した Web アプリケーションの実行」を参照してください。
このチュートリアルでは、IIS マネージャを使用して構成設定を行い、その設定が Web アプリケーションの Web.config ファイルにどのように反映されるか確認します。このチュートリアルでは、以下のタスクを行います。
カスタム マネージ コード モジュールを作成し、そのモジュールを Web アプリケーションの App_Code ディレクトリに配置する。
IIS マネージャを使用してカスタム モジュールを登録する。
IIS マネージャを使用してカスタム HTTP ヘッダーを追加する。
モジュールの機能は、このチュートリアルでは重要ではありません。代わりに、このチュートリアルでは、モジュールが要求パイプラインにどのように統合されるかについて、および IIS マネージャを使用してアプリケーションを構成すると、Web.config ファイルにはどのように反映されるかについて説明します。
前提条件
このチュートリアルを実行するための要件は次のとおりです。
Windows Vista または Windows Server 2008 における IIS 7.0 のインストールと実行。
IIS 7.0 統合モードで実行されている 1 つ以上のアプリケーション プール。
IIS 7.0 での [IIS 6 と互換性のある管理] モジュールの有効化。
Visual Studio 2008。
.NET Framework version 3.0 以降。
コンピュータの管理者権限。
Fiddler ツールなどの、コンピュータと Web サーバーとの間の HTTP 要求および HTTP 応答を検査するツール。Fiddler ツールは、Fiddler Web Debugging Proxy の Web サイトから入手できます。
メモ : Fiddler は、Microsoft がサポートしていないサードパーティ ツールです。
カスタム HTTP モジュールの作成
最初に、新しい Web サイトを作成します。
新しい Web サイトを作成するには
Visual Studio で、WalkthroughIIS7 という名前の新しいローカル HTTP Web サイトを作成します。
ローカル IIS Web サイトの作成方法については、「チュートリアル : Visual Web Developer でのローカル IIS Web サイトの作成」を参照してください。
[スタート] メニューの [すべてのプログラム] をクリックします。[アクセサリ] をクリックして、[ファイル名を指定して実行] をクリックします。
[名前] ボックスに「inetmgr」と入力し、[OK] をクリックします。
メモ : ユーザー アカウント制御 (UAC: User Account Control) が有効になっている場合、IIS マネージャにアクセスするときにメッセージが表示される場合があります。その場合は [続行] をクリックします。詳細については、「User Account Control」を参照してください。
統合モードで実行されているアプリケーション プールに Web サイトがあることを確認します。
Web アプリケーションのモードの設定方法については、「Configure the Request-Processing Mode for an Application Pool」を参照してください。
これで、カスタム HTTP モジュールを作成できます。
カスタム HTTP モジュールを作成するには
Visual Studio のソリューション エクスプローラで、Web プロジェクト ノードを右クリックし、[新しい項目の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[Visual Studio にインストールされたテンプレート] の [クラス] を選択します。
使用するプログラミング言語を選択します。
クラスの名前として「CustomModule」と入力し、[追加] をクリックします。
Web サイトに App_Code フォルダが含まれていない場合、App_Code フォルダにクラスを配置するかどうかをたずねるメッセージが表示されます。その場合は [はい] をクリックします。
クラス ファイルで、既存のコードを削除し、次のコードに置き換えます。
Imports System Imports System.Configuration Imports System.Web Imports System.Web.Security Imports System.Web.UI Public Class CustomModule Implements IHttpModule Public Sub New() ' Constructor End Sub Public Sub Init(ByVal app As HttpApplication) Implements IHttpModule.Init AddHandler app.BeginRequest, AddressOf Me.BeginRequest End Sub Public Sub BeginRequest(ByVal source As Object, ByVal e As EventArgs) Dim app As HttpApplication = CType(source, HttpApplication) Dim cont As HttpContext = app.Context Dim notification As String = cont.CurrentNotification.ToString() Dim postNotification As String = cont.IsPostNotification.ToString() cont.Response.Headers.Set("CustomHeader2", "ASPX, Event = " & notification & _ ", PostNotification = " & postNotification + _ ", DateTime = " & DateTime.Now.ToString()) End Sub Public Sub Dispose() Implements IHttpModule.Dispose End Sub End Class
using System; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; public class CustomModule : IHttpModule { public CustomModule() { // Constructor } public void Init(HttpApplication app) { app.BeginRequest += new EventHandler(BeginRequest); } public void BeginRequest(object source, EventArgs e) { HttpApplication app = (HttpApplication)source; HttpContext cont = app.Context; string notification = cont.CurrentNotification.ToString(); string postNotification = cont.IsPostNotification.ToString(); cont.Response.Headers.Set("CustomHeader2", "ASPX, Event = " + notification + ", PostNotification = " + postNotification + ", DateTime = " + DateTime.Now.ToString()); } public void Dispose() { } }
このコードでは、次の処理が実行されます。
IHttpModule インターフェイスを実装するカスタム マネージ コード モジュールが定義されます。
HttpApplication インスタンスの BeginRequest イベントのイベント ハンドラが定義されます。このイベント ハンドラでは、応答ヘッダー コレクションに追加されるカスタム ヘッダーが定義されます。
モジュールの Init メソッドで、通知の要求パイプラインにハンドラが追加されます。
このクラスは IHttpModule インターフェイスを実装するので、Init メソッドと Dispose メソッドを実装する必要があります。このモジュールの Dispose メソッドに機能はありませんが、必要な場合は、Dispose に相当するロジックをこのメソッドに実装できます。
[ビルド] メニューの [Web サイトのビルド] をクリックし、モジュールにエラーがないことを確認します。
このチュートリアルで後ほどカスタム モジュールをテストできるようにするために、このセクションの最後のタスクとして ASP.NET ページと HTML ページを作成します。
ASP.NET テスト ページと HTML テスト ページを作成するには
ASPXpage.aspx という名前の新しい単一ファイルの ASP.NET Web ページをアプリケーションのルート フォルダに追加します。
既存のマークアップを削除し、次のマークアップに置き換えます。
<%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>ASPX Module Test Page</title> </head> <body> <form id="form1" runat="server"> <div> <%= Response.Headers.Get("CustomHeader2").ToString() %> </div> </form> </body> </html>
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>ASPX Module Test Page</title> </head> <body> <form id="form1" runat="server"> <div> <%= Response.Headers.Get("CustomHeader2").ToString() %> </div> </form> </body> </html>
HTMLPage.htm という名前の新しい HTML ページを Web アプリケーションのルート フォルダに追加します。
次のマークアップを HTML ページに追加します。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>HTML Module Test Page</title> </head> <body> <div> HTML page. <br /> </div> </body> </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>HTML Module Test Page</title> </head> <body> <div> HTML page. <br /> </div> </body> </html>
すべての変更を保存します。
ASPXpage.aspx ページと HTMLpage.htm ページを個別に実行し、ブラウザで表示できることを確認します。
メモ : Visual Studio アプリケーションは開いたままにしておきます。このアプリケーションに戻って、IIS マネージャを使用して行った構成の変更を確認します。
この時点では、ページを実行しても、カスタム モジュールは呼び出されません。次の手順では、カスタム モジュールを要求パイプラインに追加します。
IIS マネージャを使用した構成の変更
このセクションでは、IIS マネージャを使用して IIS アプリケーションの構成設定をいくつか行います。カスタム モジュールを登録し、カスタム ヘッダーを追加し、静的な圧縮をオフにします。
カスタム マネージ コード モジュールを登録するには
[スタート] メニューの [すべてのプログラム] をクリックします。[アクセサリ] をクリックして、[ファイル名を指定して実行] をクリックします。
[名前] ボックスに「inetmgr」と入力し、[OK] をクリックします。
メモ : UAC が有効になっている場合、IIS マネージャにアクセスするときにメッセージが表示される場合があります。その場合は [続行] をクリックします。詳細については、「User Account Control」を参照してください。
[接続] ペインで、Web サイトをホストしているコンピュータまたはサーバーの名前を展開します。
[サイト] フォルダを展開します。
WalkthroughIIS7 という Web サイトを選択します。Web アプリケーションが Web サイトのアプリケーションの場合、Windows Server 2008 で、最初にその Web サイトを展開し、次に WalkthroughIIS7 を選択します。
既定では、IIS マネージャの中央のペインに、Web サーバーの構成オプションが区分ごとに表示されます。WalkthroughIIS7 Web アプリケーションの場合、[ASP.NET] および [IIS] という 2 つの区分があります。
中央のペインの [IIS] セクションで、[モジュール] アイコンをダブルクリックします。
中央のペインの [モジュール] 詳細に、IIS に対して現在構成されているすべてのモジュールが表示されます。
[操作] ペインで、[マネージ モジュールの追加] をクリックします。
[マネージ モジュールの追加] ダイアログ ボックスが表示されます。
[名前] ボックスに「CustomModule」と入力します。
モジュールを説明する任意の単語または語句を名前として使用できます。このチュートリアルでは、単純なモジュール名を使用します。
[種類] ボックスの一覧で、モジュールのマネージ型の完全修飾名を選択するか入力します。
IIS の構成には、IHttpModule を実装する、App_Code フォルダ内のクラスが含まれているので、CustomModule 型が一覧に表示されます。
[ASP.NET アプリケーションまたはマネージ ハンドラへの要求に対してのみ呼び出す] チェック ボックスがオフになっていることを確認します。
このチュートリアルでは、ASP.NET 要求だけでなく、パイプラインのすべての要求にモジュールを適用します。
[OK] をクリックします。
マネージ コード モジュールがモジュールの一覧に追加されます。追加されたモジュールを表示するには、一覧をスクロールしたり並べ替えたりする必要がある場合があります。
カスタム応答ヘッダーを追加するには
IIS マネージャの左ペインで、WalkthroughIIS7 ノードの名前をクリックしてサイトの主要構成ペインを表示します。
中央のペインの [IIS] 設定セクションで、[HTTP 応答ヘッダー] アイコンをダブルクリックします。
[HTTP 応答ヘッダー] 機能詳細が中央のペインに表示されます。ここには、現在定義されているすべての HTTP 応答ヘッダーが表示されます。
[操作] ペインで、[追加] をクリックします。
[カスタム HTTP 応答ヘッダーの追加] ダイアログ ボックスが表示されます。
[名前] ボックスに「CustomHeader1」と入力します。
ヘッダーを説明する任意の単語または語句を名前として使用できます。
[値] ボックスに、値として「SampleHeader」と入力します。
次に静的な圧縮をオフにします。これにより、HTML ページなどの静的コンテンツが圧縮されなくなります。
静的な圧縮をオフにするには
左ペインで WalkthroughIIS7 ノードの名前をクリックして、サイトの主要構成ペインを中央のペインに表示します。
IIS マネージャの中央のペインで、[IIS] 設定セクションの [圧縮] アイコンをダブルクリックします。
[圧縮] 機能詳細が中央のペインに表示されます。
[静的なコンテンツの圧縮を有効にする] チェック ボックスがオフになっていることを確認します。
Visual Studio での構成の変更の確認
このチュートリアルでは、IIS マネージャを使用して構成タスクを実行してきました。この手順では、アプリケーションの Web.config ファイルの変更内容を確認します。
Web.config ファイルでモジュールの登録を確認するには
Visual Studio アプリケーションおよび WalkthroughIIS7 アプリケーションに戻ります。
ソリューション エクスプローラで、Web サイトの名前を右クリックし、[フォルダの更新] をクリックします。
これにより、Web サイト フォルダの Visual Studio ビューが、ディスク上のフォルダおよびファイルと同期します。
当初、アプリケーションに Web.config ファイルが含まれていなかった場合、Web.config ファイルはこの時点で Web アプリケーションに含まれます。アプリケーションに Web.config ファイルが既にあった場合、そのファイルには変更が加えられています。
ソリューション エクスプローラで、Web.config ファイルをダブルクリックしてファイルの内容を表示します。
system.webServer セクションには、IIS マネージャを使用して行った構成の変更が追加されています。system.webServer セクションには、次の子要素があります。
要求処理パイプラインのカスタム モジュールを登録する modules 要素。
カスタム応答ヘッダーを定義する httpProtocol 要素。
静的な圧縮を無効にする urlCompression 要素。
system.webServer セクションは、次の例のようになっています。
<system.webServer> <modules> <add name="CustomModule" type="CustomModule" preCondition="" /> </modules> <httpProtocol> <customHeaders> <add name="CustomHeader1" value="SampleHeader" /> </customHeaders> </httpProtocol> <urlCompression doStaticCompression="false" /> </system.webServer>
system.webServer セクションの詳細については、「ASP.NET 構成の使用」および「IIS 7.0 Beta: system.webServer Section Group (IIS Settings Schema)」を参照してください。
カスタム モジュールのテスト
IIS 7.0 には統合された要求パイプラインがあります。.aspx ページ、.htm ページなどのすべてのアプリケーション リソースに対する要求で、このチュートリアルで作成したカスタム モジュールと同様に、マネージ コード モジュールのパイプライン通知を発生させることができます。
メモ : |
---|
IIS マネージャでマネージ コード モジュールを構成したとき、[ASP.NET アプリケーションまたはマネージ ハンドラへの要求に対してのみ呼び出す] オプションはオンにしませんでした。このオプションをオンにした場合、カスタム モジュールは、HTML ファイルなどの静的リソースに関するパイプライン通知は受け取らず、ASP.NET リソースに関するパイプライン通知のみを受け取ります。 |
カスタム モジュールがすべてのリソースに適用されることを確認するには
Visual Studio で、ASPXpage.aspx ページを開き、Ctrl キーを押しながら F5 キーを押してブラウザでページを表示します。
モジュールで定義されているカスタム ヘッダーがブラウザに表示されます。ASP.NET ページでは、IIS により定義されているカスタム ヘッダーにはアクセスできません。これは、ページの内容がストリームにレンダリングされた後に、このヘッダー情報が追加されるためです。ただし、Fiddler などの HTTP トラフィックを監視するツールを使用することで、ヘッダーが設定されていることを確認できます。
HTTP トラフィックの監視ツールを開き、ブラウザで ASPXpage.aspx ページを再表示します。
メモ : ASPXpage.aspx ページの URL で localhost が使用されている場合、localhost を IIS 7.0 がインストールされているコンピュータの名前に変更します。通常の開発シナリオでは、これは Visual Studio が実行されているコンピュータでもあります。
CustomHeader1 および CustomHeader2 が、応答のヘッダー コレクションに表示されていることを確認します。
ブラウザで HTMLPage.htm を表示します。
CustomHeader1 および CustomHeader2 が、応答のヘッダー コレクションに表示されていることを確認します。
次の手順
このチュートリアルでは、IIS 7.0 での ASP.NET の構成について説明しました。IIS 7.0 Web サーバーの構成設定と ASP.NET の構成設定は 1 つの構成ファイルに統合されており、このファイルは単一の管理インターフェイスを使用して編集できます。
IIS マネージャでのその他の設定について、および変更が構成ファイルにどのように反映されるかについてさらに学習したい方もいるかと思います。詳細については、「IIS 7.0 Beta: Internet Information Services (IIS) Manager」を参照してください。
参照
処理手順
チュートリアル : MMC を使用した IIS 6.0 での ASP.NET アプリケーションの構成
概念
IIS 6.0 から IIS 7.0 への ASP.NET アプリケーションの移行