次の方法で共有


IIS 6.0 から IIS 7.0 への ASP.NET アプリケーションの移行

更新 : 2007 年 11 月

このトピックでは、インターネット インフォメーション サービス (IIS: Internet Information Services) 6.0 から IIS 7.0 に Web アプリケーションを移行する方法について説明します。IIS 7.0 では、クラシック モードと統合モードのどちらかを Web アプリケーションが使用するように構成できます。クラシック モードは、ISAPI 拡張を使用して ASP.NET ランタイムを呼び出すことで、IIS の以前のバージョンとの下位互換性を維持します。このオプションでは、通常、既存のアプリケーションをほとんどまたはまったく変更する必要がありません。

IIS 7.0 統合モードは、ASP.NET の要求パイプラインと IIS の主要要求パイプラインを結合する、統合された要求処理パイプラインです。統合パイプラインにより、パフォーマンスの向上と、構成および管理のモジュール性が実現し、より柔軟にマネージ コード モジュールを使用して IIS を拡張できます。たとえば、Web アプリケーションの App_Code フォルダにマネージ コード モジュールを定義し、それを登録して、静的ファイルに対する要求を含むすべての IIS 要求に適用できます。

IIS 7.0 統合モードを使用するには、アプリケーションの Web.config ファイルに若干の変更を加える必要がある場合があります。IHttpModule インターフェイスを実装したカスタム モジュールをアプリケーションが使用している場合、その他にもいくつか変更が必要になる場合があります。

IIS 7.0 の統合モードの要求処理パイプラインの概要については、「IIS 7.0 における ASP.NET アプリケーションのライフ サイクルの概要」を参照してください。IIS 7.0 を使用すると、同じサーバーで、クラシック モードのアプリケーションと統合モードのアプリケーションを同時に実行できます。クラシック モードと統合モードはどちらも .NET Framework version 2.0 とそれ以降のリリースをサポートします。.NET Framework Version 1.1 は、クラシック モードのみがサポートしています。以前のバージョンの IIS を IIS 7.0 にアップグレードする方法については、「Upgrading ASP.NET Applications to IIS 7.0: Differences between IIS 7.0 Integrated Mode and Classic mode」を参照してください。

Bb515251.alert_note(ja-jp,VS.90).gifメモ :

このトピックの情報を使用すると、Wwb アプリケーションを IIS 5.x から IIS 7.0 に移行できます。ただし、追加の変更を行う必要がある場合があります。これらの変更については、ここでは説明しません。詳細については、「」を参照してください。

このトピックは、次のセクションで構成されています。

  • IIS 7.0 の Web.config ファイル

  • Web アプリケーションのクラシック モードへの移行

  • Web アプリケーションの統合モードへの移行

IIS 7.0 の Web.config ファイル

ASP.NET Web アプリケーションを IIS 7.0 統合モードに移行する場合、Web.config ファイルを更新する必要があります。IIS 7.0 では、Web.config ファイルを管理できる方法、および Web.config ファイルに保存できる設定の種類に関して変更が加えられています。新しい設定は、system.webServer という名前の新しい構成セクションにあります。

IIS 6.0 では、ASP.NET MMC スナップインにより、ASP.NET を構成するための IIS 関連の管理機能が用意されます。詳細については、「チュートリアル : MMC を使用した IIS 6.0 での ASP.NET アプリケーションの構成」を参照してください。

IIS 7.0 では、ASP.NET アプリケーションの管理機能は IIS の管理機能とより緊密に統合されており、個別のスナップインはありません。代わりに、すべての IIS および ASP.NET の構成は IIS マネージャ を使用して行います。IIS 7.0 の構成情報は .NET Framework 構成システムに基づくため、IIS 7.0 で実行されるアプリケーションの Web.config ファイルには、Web サーバーの構成設定と ASP.NET の構成設定の両方が含まれます。たとえば、IIS 7.0 で実行される ASP.NET アプリケーションの Web.config ファイルで、ブラウザが特定のファイルを要求しないときに返す既定のファイルを指定できます (IIS 6.0 とそれ以前のバージョンの IIS では、これは IIS メタベースに保存される設定です)。

Web.config ファイルの編集

IIS 7.0 で実行される Web アプリケーションの Web.config ファイルは、次の方法で変更できます。

  • Visual Studio、Visual Web Developer のうちのいずれかを使用して、またはテキスト エディタ プログラムを使用して、Web.config ファイルを直接編集する。

  • IIS マネージャ を使用する。詳細については、「Internet Information Services (IIS) Manager」を参照してください。

  • ASP.NET の Web サイト管理ツールを使用する。詳細については、「ASP.NET Web サイト管理ツール」を参照してください。

    Bb515251.alert_note(ja-jp,VS.90).gifメモ :

    Web サイト管理ツールで行った変更は、system.webServer 要素の子の構成要素には反映されません。

  • IIS 7.0 コマンド ライン ツール (Appcmd.exe) を使用する。このユーティリティを使用すると、IIS の構成設定と Web アプリケーションの構成設定をコマンド ラインで指定できます。詳細については、「IIS 7.0 Command-Line Tool」を参照してください。

system.webServer セクション

Web.config ファイルの system.webServer 構成セクションでは、Web アプリケーションに適用する IIS 7.0 設定を指定します。system.WebServer セクションは、configuration 要素の子です。詳細については、「IIS 7.0: system.webServer Section Group (IIS Settings Schema)」を参照してください。

system.WebServer 構成グループで設定できる Web サーバーの設定には、たとえば次のものがあります。

  • 要求に特定のリソースが含まれていない場合に Web サーバーからクライアントに返す既定のドキュメント (defaultDocument 要素)。

  • 応答の圧縮設定 (httpCompression 要素)。

  • カスタム ヘッダー (httpProtocol セクションの customHeaders 要素)。

  • モジュール (modules 要素)。

  • ヘッダー (handlers 要素)。

一部の設定は IIS 7.0 統合モードにのみ適用され、クラシック モードには適用されません。たとえば、アプリケーションがクラシック モードで実行されている場合、Web.config ファイルの system.WebServer セクションで指定されているマネージ コード モジュールとハンドラは無視されます。代わりに、system.web セクションの httpModules 要素と httpHandlers 要素を使用して、以前のバージョンの IIS で行ったようにマネージ コード モジュールとハンドラを定義する必要があります。

system.webServer 構成セクションの使用例については、「方法 : IIS 7.0 の <system.webServer> セクションを構成する」を参照してください。

Web アプリケーションのクラシック モードへの移行

通常、Web アプリケーションの IIS 6.0 から IIS 7.0 のクラシック モードへの移行は、クラシック モードで実行されているアプリケーション プールにそのアプリケーションを配置するだけで行うことができます。たとえば、 を使用して IIS 7.0 をインストールすると、既定では Web サーバーは統合モードで動作するように構成されます。また、DefaultAppPool という名前の既定のアプリケーション プールの下で実行されるように構成されます。Web アプリケーションをクラシック モードで実行するには、Classic.NETAppPool アプリケーションを使用するか、クラシック モードで実行されるように構成した新しいアプリケーション プールを作成します。アプリケーション プールの作成方法については、「Create an Application Pool」を参照してください。

クラシック モードで実行されるアプリケーションの、IHttpModule インターフェイスを実装するカスタム モジュールには、ASP.NET ランタイムが処理するパイプライン要求についてのみ通知されます。たとえば、これらのモジュールには .aspx ページの要求について通知されます。クラシック モードのアプリケーション ライフ サイクルは、IIS 6.0 における ASP.NET のライフ サイクルと同じです。詳細については、「IIS 5.0 および 6.0 における ASP.NET アプリケーションのライフ サイクルの概要」を参照してください。

クラシック モードで実行されるアプリケーションにハンドラが含まれていて、そのハンドラが IIS でカスタム拡張子を処理するスクリプト マップを必要とする場合、そのハンドラを httpHandler グループと handler グループの両方に登録する必要があります。handler 要素の modules 属性と scriptProcessor 属性を指定することで、カスタム ファイルの名前の拡張子を ASP.NET ISAPI 拡張子 (Aspnet_isapi.dll) にマップします。これらの属性では、ハンドラを定義するモジュールが ISAPI 拡張子であることを指定し、さらにその拡張子のパスを指定します。このようにして、クラシック モードの IIS 7.0 は、以前のバージョンの IIS との下位互換性を提供します。ただし、統合モードでアプリケーションを実行する場合、modules 属性と scriptProcessor 属性は削除する必要があります。詳細については、「方法 : IIS で HTTP ハンドラ拡張子を構成する」を参照してください。

IIS 6.0 からクラシック モードに Web アプリケーションを移行した場合、変更を加えない限り統合モードでの動作は保証されません。クラシック モードから統合モードにアプリケーションを切り替えた場合 (およびカスタム モジュールとハンドラを変更した場合)、アプリケーションを統合モードで正しく動作させるために、追加の変更を行う必要がある場合があります。このトピックの次のセクションでは、アプリケーションを IIS 7.0 統合モードに移行する方法について説明します。

Web アプリケーションの統合モードへの移行

カスタム モジュールまたはハンドラを含まない Web アプリケーションは、通常は変更を加えなくても、IIS 7.0 において統合モードで動作します。カスタム モジュールまたはハンドラに依存する Web アプリケーションの場合、次の手順に従って、統合モードでアプリケーションを実行できるようにする必要があります。

  • このトピックの後半にある「Web Config ファイルの統合モードへの移行」セクションで説明されている方法の 1 つを使用して、カスタム モジュールとハンドラを Web.config ファイルの system.webServer セクションに登録します。

  • カスタム モジュールの Init メソッドだけの BeginRequest および EndRequest と同様に、HttpApplication 要求パイプライン イベントのイベント ハンドラを定義します。

  • Upgrading ASP.NET Applications to IIS 7.0: Differences between IIS 7.0 Integrated Mode and Classic mode」の「Known Differences Between Integrated Mode and Classic Mode」セクションで説明されている問題を解決したか確認します。

IHttpModule インターフェイスを実装するモジュールは、マネージ コード モジュールと呼ばれはす。これは、これらのモジュールが .NET Framework を使用してビルドされるためです。マネージ コード モジュールは、サーバー レベルまたはアプリケーション レベルで登録できます。ネイティブ コード モジュールの DLL (非マネージ コード) は、サーバー レベルでのみ登録されます。セッション状態、フォーム認証などの主要な ASP.NET 機能は、統合モードではマネージ モジュールとして実装されます。

クラシック モードから統合モードにアプリケーションを移行する場合、クラシック モードのカスタム モジュールおよびハンドラの登録をそのままにしておくことも、それらの登録を削除することもできます。クラシック モードで使用されている httpModules および httpHandlers の登録を削除しない場合、エラーを回避するために validation 要素の validateIntegratedModeConfiguration 属性を false に設定する必要があります。validation 要素は、system.webServer 要素の子要素です。詳細については、「ASP.NET Integration with IIS7」の「Disabling the migration message」セクションを参照してください。

統合モードで使用するための Web.config ファイルの移行

モジュールまたはハンドラがアプリケーション レベルで定義されている場合、モジュールまたはハンドラは自動的には呼び出されません。これには、Bin フォルダ内のアセンブリで定義されているモジュールまたはハンドラ、App_Code フォルダでソース コードとして定義されているモジュールまたはハンドラ、および Web.config ファイルの system.webServer セクションで定義されている登録されていないモジュールまたはハンドラが含まれます。モジュールまたはハンドラを統合モードの要求パイプラインに追加するには、次のいずれかの方法を使用してモジュールまたはハンドラを登録する必要があります。

統合モードを操作するためのクラスとプロパティ

IIS 7.0 の統合モードと .NET Framework Version 3.0 以降でアプリケーションを使用する場合、クラシック モードでは利用できない次のクラスおよびメンバを利用できます。

参照

概念

Windows Vista での IIS 7.0 および Visual Studio を使用した Web アプリケーションの実行