ASP から ASP.NET 2.0 への移行

Jayesh Patel, Bryan Acker, Robert McGovern
Infusion Development

July 2004

適用対象 :
   Microsoft ASP.NET 2.0

概要 : ASP.NET 2.0 で開発を行うことのメリットを概観し、ASP から ASP.NET 2.0 に移行する開発者のためのガイドを提供します。

目次

はじめに
ASP から移行する理由
ASP.NET 2.0 を使用する理由
ASP 開発者にとっての ASP.NET 2.0 の意味
ASP.NET 2.0 の新機能
開発ツール
マスタ ページ
コンテンツ ページ
入れ子になったマスタ ページ
マスタ ページのオーバーライド
テーマとスキン
サイト ナビゲーション
データ アクセスの合理化
メンバシップ
プロファイル
Web パーツ
コンパイル オプション
管理
スケーラビリティとパフォーマンス
強化された拡張性
まとめ
参考書籍

はじめに

現在、Web ベースのアプリケーションで提供されるソリューションは、ますます複雑になっています。今日の企業は、より高速で強力な Web アプリケーションをより短時間で生産する必要性に迫られています。Microsoft ASP.NET 2.0 は、Web ソリューション開発のための Microsoft の最新技術で、アプリケーションの開発、保守、および配置を容易にするさまざまな新機能が導入されています。

この記事では、ASP 開発者を対象に、ASP.NET 2.0 でアプリケーションを開発する際に必要となる概念とツールを紹介します。ASP 開発者は、Microsoft の最新の Web 技術を学ぶだけでなく、ASP から ASP.NET 2.0 に移行する方法を理解する必要もあります。

最初のセクションでは、ASP.NET 1.0 の機能を簡単におさらいします。ASP.NET 1.0 について既によくご存じの方は、このセクションを飛ばして次の「ASP.NET 2.0 を使用する理由」に進んでかまいません。

ASP から移行する理由

ASP.NET では、高い堅牢性と拡張性を備えた強力なアプリケーションを作成できるようにするために、ASP のコア技術に多くの改良が施されています。これらのトピックの多くは MSDN で詳しく取り上げられていますが、ここでは、従来の ASP を使用している開発者に最も関係のある機能を例として紹介します。移行プロセスおよび ASP.NET にアップグレードするメリットの詳細なガイドについては、ASP から ASP.NET への移行ガイド を参照してください。

ASP.NET アプリケーションと ASP アプリケーションはサイドバイサイドで実行できます。ASP.NET では、.NET 以前のコンポーネントを ASP.NET アプリケーションから呼び出すことができます。このことは、移行においてきわめて重要な意味を持ちます。というのも、これによりアプリケーション全体を書き直す必要がなくなり、既存の ASP アプリケーションを簡単に .NET に移植できるからです。

ASP アプリケーションと ASP.NET アプリケーションは別のプロセスで実行されます。ASP ページは asp.dll に渡されます。このため ASP アプリケーションでは、1 つのアプリケーションがクラッシュすると Web サーバー全体がダウンする可能性があります。ASP.NET アプリケーションではそのようなことはありません。ASP.NET ページは、アプリケーション ドメイン内の aspnet ワーカー プロセスを使って実行されます。アプリケーション ドメインは ASP.NET ランタイムの内部で実行されるコンテナで、これにより、ASP.NET アプリケーションの活動が分離されます。ASP.NET ランタイムはアプリケーション ドメインを監視し、おかしな動作が見られると、新しいインスタンスを作成して元のインスタンスと置き換えます。

Pet Shop .NET アプリケーションでのテストによると、ASP.NET アプリケーションでは、1 秒間に処理できる要求の数が従来の ASP アプリケーションの 3 倍に上ります。また、ASP.NET に導入された新機能 (サーバー コントロールやイベント処理) を使用すると、アプリケーションをよりすばやく、より少ないコードで作成できます。

開発者の生産性

  • ASP.NET にはオブジェクト指向のプログラミング モデルが実装されており、すべてのブラウザで動作する複雑なページを、より少ないコードで作成できるようになっています。
  • ASP.NET では、開発に使用する言語を柔軟に選択できます。型のない言語しかサポートされていない ASP とは違って、さまざまなコンパイル言語がサポートされています。このため開発者は、同じアプリケーションのページやコンポーネントをさまざまな言語で作成できます。
  • ASP.NET の開発環境は Microsoft Visual Studio.NET です。Visual Studio .NET では、"ドラッグ アンド ドロップ" の手法を使ってアプリケーションを作成できるほか、豊富なデバッグ環境も用意されています。
  • ASP.NET では、分離コード モデルを使ってデザイン コード (HTML) をロジックから分離することができます。このため、開発者によるアプリケーションのロジックの開発とデザイナによるページのグラフィック要素の制作の同時進行が可能です。

パフォーマンスとスケーラビリティの強化

  • ASP.NET のアプリケーションはコンパイルされるため、従来の ASP アプリケーションより高速です。
  • 出力キャッシュを使用すると、動的ページから生成されたコンテンツを格納できるため、要求/応答のスループットが向上します。これにより、クエリの結果をキャッシュに保存して、データベースへの冗長なトリップを取り除くことができます。
  • ASP.NET では、特定のコンピュータ上のデータベースまたは Microsoft Windows サービスにセッションを保存できます。このため、Web ファームのすべてのコンピュータでセッションの情報を共有できます。

簡単な配置

  • ASP.NET は、アプリケーションの配置の面倒を軽減します。ASP.NET では、アプリケーションをサーバーに配置する際に、regsrv32 を使用してコンポーネントを登録する必要がありません。
  • 構成情報はすべて XML 構成ファイルに保存されます。
  • ASP.NET では、Web サーバーを再起動せずにコンポーネントをアップグレードできます。

バージョン 1.0 および 1.1 の ASP.NET でもこれらのメリットの多くを享受できますが、ASP.NET バージョン 2.0 はさらに強力なものとなっています。

ASP.NET 2.0 を使用する理由

ASP.NET の最初のバージョンにより、従来の ASP に比べて Web アプリケーションの開発方法が大幅に改善されました。ASP.NET 2.0 では、以下の 4 つの目標に重点を置いてさらなる改良が加えられています。

  1. Web アプリケーションの信頼性および操作性を高める。

    ASP.NET 2.0 では、パフォーマンスとスケーラビリティの強化のために、Microsoft インターネット インフォメーション サービス (IIS) 6.0 の新機能を活用しています。たとえば、IIS 6.0 の新しいプロセス モデルでは、サーバーで複数のアプリケーションを真に独立した形でホストできるようになっています。各 ASP.NET アプリケーションにそれぞれ専用の分離プロセスが割り当てられるため、誤って他のアプリケーションに干渉することはありません。つまり、アプリケーションが互いを破壊するようなことはなくなります。各アプリケーションは、他のアプリケーションから完全に分離した形で実行されます。1 つのアプリケーションがクラッシュしても、他のアプリケーションに影響が及ぶことはありません。

    操作性の面では、マスタ ページやテーマなどの新機能により、一貫した構造を使用して大規模な Web アプリケーションを開発できます。構造の管理や構成も簡単に行えるようになっています。そのほか、ASP.NET 2.0 で加えられた変更により、モバイル デバイス用の Web ページを自動的に作成できます。Microsoft Mobile Internet Toolkit がコア フレームワークに完全に統合された結果、ASP.NET 2.0 は、企業で使用されるあらゆる種類のアプリケーションを開発できる完全なプラットフォームとなっています。

  2. 一般的なシナリオで記述しなければならないコードの量を減らす。

    ASP.NET 2.0 に含まれているウィザードやコントロールを使用すると、頻繁に実行されるタスク (データ アクセスなど) を、1 行もコードを書かずに実行できます。Visual Studio 2005 のデザイナでは、データ連結テーブルを含む複雑なページのレイアウトや構成を行うことができます。これらのウィザードを使用することによって、開発者はよりすばやく、スマートに作業できます。

    ASP.NET 2.0 では、Microsoft .NET Framework の変更も活用されています。中でも部分クラスの概念は、ASP.NET 開発者にとって有効です。部分クラスによって、開発者はコードの一部を記述するだけで済むようになります。残りの部分は、ASP.NET コンパイラによって必要に応じて記述されます。これにより、定型コードを目にすることも、それらを記述する必要もなくなります。

  3. Web アプリケーションをパーソナライズするためのユーザー機能を提供する。

    ASP.NET 2.0 には、ユーザー アカウントを管理したりアプリケーションのページの内容やレイアウトをパーソナライズしたりするのに役立つ組み込みコントロールが含まれています。まず、メンバシップ サービスが、ユーザーの追跡を可能にします。メンバシップ サービスに統合されている新しいログイン コントロールを使用すると、コードを一切記述することなく、アカウントの作成やユーザーのログインを自動化できます。新しい Web パーツ機能では、Web パーツと呼ばれるサブパネルを含む Web アプリケーションを作成できます。ユーザーは、それぞれの目的に応じて、Web ページに表示するパーツを選択したり、カスタマイズしたりできます。最後にプロファイル サービスが、宣言型の XML 構成ファイルによって、ユーザーの設定とデータの永続化を実現します。

  4. 一貫したレイアウトとデザインを生成するための高度なデザイン機能を提供する。

    ASP.NET 2.0 には、一貫したページ レイアウトとデザインを持つアプリケーションを構築するための機能として、マスタ ページテーマ、およびスキンが導入されています。実装や変更も容易なこれらの新機能によって、大規模なアプリケーションの管理性および保守性が大幅に強化されます。

ASP.NET 2.0 の新機能の多くは、これらの目標を実現するために導入されています。この記事の残りの部分では、個々の技術を取り上げて、ASP.NET 2.0 が ASP.NET 1.0 をどのように拡張して、強力な Web アプリケーション開発プラットフォームを実現しているのかを見ていきます。

ASP 開発者にとっての ASP.NET 2.0 の意味

ASP.NET 2.0 の新機能が ASP 開発者に与える影響は、その開発者の開発経験によって大きく異なります。従来の ASP では、表やフォームの生成などの比較的単純なタスクでさえ、HTML に関するかなりの知識と、少なからぬ量のコーディング作業が必要になりました。ASP.NET では、こうした特殊な要素のほとんどが、自動生成コードやコア クラス ライブラリにカプセル化されています。このため、HTML タグ、POST、GET、クエリ文字列などに煩わされることなく、 ビジネス ロジックを実装するコードの開発に集中できます。

従来の ASP の開発では、HTML コードとスクリプト コードが混在していました。こうしてスパゲッティのように絡み合ったコードは、非常に読みにくいものになります。また、スクリプト コードをどこにでも挿入できるため、結果として、後の拡張を視野に入れてコードを適切に共有するような、綿密な計画に基づくアプリケーションを開発することが困難になっていました。ASP.NET アプリケーションでは、オブジェクト指向パラダイムの実装により、アプリケーションをより短時間で開発できるようになっているほか、既存のコードを拡張する際の複雑さも軽減されています。

ASP では冗長な細部を手作業で実装しなければなりませんでしたが、ASP.NET 2.0 ではこの問題も解決されています。たとえば、オブジェクト指向の機能を使用して、ページ間でコードを簡単に再利用できます。また、マスタ ページを活用してアプリケーション全体で一貫したデザインをすばやく作成したり、スキンやテーマを適用して Web ページのルック アンド フィールをプログラムで設定したりすることもできます。直感的なデザイン環境、豊富なデバッグ ツール、厳密に型指定されたコンパイル言語などを備えた ASP.NET 2.0 を使用すれば、より優れたアプリケーションをより短時間で開発できます。

ASP.NET 2.0 の新機能

このセクションでは、ASP.NET 2.0 の主な機能を概観し、Microsoft の最新の Web 技術に移行することによって得られるメリットの一部を紹介します。ここで取り上げるトピックの詳細については、MSDN の ASP.NET 2.0 ホームページを参照してください。

開発ツール

Visual Studio の最新リリース (Microsoft Visual Studio 2005) には、Web アプリケーションの開発に役立つ新しい開発ツールがいくつか含まれています。

  • あらゆる場所で利用できる IntelliSense。

    IntelliSense は、プログラミングのヒントを "ポップアップ" で表示することによって、コードをすばやく開発できるようにします。コードでオブジェクトを参照するたびに、利用可能なメソッドやイベントの一覧が IntelliSense によって表示されます。これにより、メソッドを最後まで入力したり、指定するパラメータをマニュアルで調べたりする必要がなくなります。Visual Studio.NET の以前のリリースでも IntelliSense のサポートは十分すばらしいものでしたが、Visual Studio 2005 ではさらに、スクリプト ブロック、インライン CSS スタイル属性、構成ファイル、DTD スキーマや XML スキーマへの参照を含む XML ファイルなどでも IntelliSense を利用できるようになっています。

  • さまざまなタスクのコードを自動生成するウィザード。

    ASP.NET 2.0 の主な目標の 1 つが、開発時間を短縮し、記述しなければならないコードを削減することです。Visual Studio 2005 には、データ ソース接続の作成、HMTL コードの生成、およびその他の一般的なタスクのためのウィザードが用意されています。

  • マスタ ページ、テーマ、およびスキンのデザイナ サポート

    従来の ASP ページでは、各ページを毎回ゼロから作成しなければなりませんでした。このため、アプリケーションのページの複製に時間がかかりました。Visual Studio 2005 では、ASP.NET マスタ ページの WYSIWYG 編集が完全にサポートされています。マスタ ページはページのテンプレートで、これを使用すると、アプリケーションの各ページに一貫したスタイルとレイアウトを適用できます。マスタ ページを作成すれば、後はアプリケーションで新しいページを作成するたびに、マスタ ページのスタイルとレイアウトが自動的に適用されます。

    Visual Studio 2005 では、ページに追加したコンテンツがマスタ ページと組み合わさったときにどのように表示されるのかを確認できます (しかも、マスタ ページのコードは開発ページには表示されません)。

  • 強化されたコード編集機能。

    従来の ASP アプリケーションでは、コードの編集は簡単な作業ではありません。Visual Studio 2005 では、すべての HTML コード (空白文字、大文字/小文字の区別、インデント、キャリッジ リターン、ワードラップなどを含む) がそのまま保持されるため、コードの編集がはるかに容易になります。また、アプリケーションの HTML コードのスタイル書式を設定し、それをインポートしたりエクスポートしたりすることによって、チーム全体の開発を標準化することができます。スタイル シートでは、ユーザーに表示されるコンテンツの書式を指定できます。Visual Studio.NET 2005 では、HTML コードを記述する際の書式をカスタマイズできます。たとえば、HTML タグをすべて大文字にする、ネストされている HTML 要素に 2 文字分のインデントを設定するなど、スタイルのガイドラインを適用することができます。こうしたガイドラインにより、開発チーム全体が同じ書式ルールでページを開発できるようになります。

    また、Visual Studio 2005 では、大きなドキュメントを編集する際に便利なタグ アウトライン モードとタグ ナビゲーション モードがサポートされています。これらのモードを使用すると、HTML タグや ASP.NET タグの展開、折りたたみ、タグ間の移動などを行うことができるほか、開始タグと終了タグの関係も把握しやすくなります。

    [表の挿入] ダイアログ ボックスを使用して、HTML ページの表を簡単に追加および編集できます。表のスタイル、サイズ (表の幅および行と列の数)、および書式を、コードを一切記述することなくウィザードで指定できます。

    Visual Studio 2005 では、特定の Web ブラウザや HTML 標準をターゲットにして HTML コードを開発できます。たとえば、すべての HTML コードを Netscape の標準に準拠させるには、Netscape HTML をターゲットとして選択します。Netscape の標準を満たしていないコードには、リアルタイムでフラグが付けられます。

  • Visual Studio 2005 に含まれている簡易 Web サーバー。

    Visual Studio 2005 には、ASP.NET アプリケーション開発用の簡易 Web サーバーが含まれています。ローカル要求のみを処理するこの Web サーバーは、開発に最適です。この Web サーバーの追加により、開発用のコンピュータで IIS を使用する必要がなくなります。この組み込みサーバーを使用すれば、デバッグも完全にサポートされます。また、もう 1 つの重要なメリットとして、誰でもアプリケーションの構築やテストを行えるようになります。これまでのようにコンピュータの管理者である必要はありません。ただし、最終的なアプリケーションは、これまでと同じように IIS に配置する必要があります。

  • 強化されたデバッグ環境。

    ASP ではコードがその場で解釈されるため、アプリケーションのデバッグは困難なプロセスになります。構文エラーがあっても、実際にアプリケーションを実行してみないとわかりません。Visual Studio 2005 では、デバッグのサポートが強化されています。Visual Studio .NET 2003 ではまだ限定的だったエディット コンティニュ デバッグのサポートも強化されており、 デバッグ時により多くの情報を利用できるようになっています。たとえば、データヒントの実装の強化により、デバッグ時に変数や式の情報がマウス ポップアップ ウィンドウとして表示されます。そのほか、逆アセンブリ、レジスタ、アドレス (適用可能な場合)、および自分で記述したコードのみ ([Just My Code Stepping]) にブレークポイントを設定する高度なデバッグ機能などの追加機能も用意されています。

Visual Studio 2005 の開発ツールの詳細については、Visual Studio .NET の大きな変更点 を参照してください。

マスタ ページ

マスタ ページは ASP.NET 2.0 で導入された新機能で、サイトで一貫したルック アンド フィールを維持するための 1 つの場所を作成することによって、Web アプリケーションの開発時間を短縮できます。マスタ ページを使用すると、アプリケーションの多くのページに共通のレイアウトを生成するためのテンプレートを作成できます。マスタ ページの第 1 の目標は、ページを毎回ゼロから作成したり、レイアウトのコードを繰り返し記述したりしなくても済むようにすることです。また、マスタ ページを使用すると、アプリケーションのページのレイアウトを変更する必要が生じた場合に、個々のページを更新しなくてもマスタ ページを更新するだけで済むというメリットもあります。この機能は、Windows フォームのビジュアル継承に少し似ています。ビジュアル継承は、元のバージョンの .NET Framework で利用可能な機能で、デスクトップ アプリケーションの開発に使用されます。

マスタ ページは、拡張子 (.aspx ではなく .master) といくつかの特殊なコントロールやヘッダー フィールドを除いては、見た目は標準の ASP.NET Web ページと変わりません。マスタ ページには、<asp:ContentPlaceHolder> コントロールが 1 つ以上含まれている必要があります。これらのコントロールは、置き換え可能なコンテンツの領域を表します。基本的には、ContentPlaceHolder に含まれているものを除くすべての要素が、マスタ ページを使用するすべてのページに表示されます。

このコードの大半は Visual Studio 2005 によって自動的に作成されるため、ページのレイアウトのために複雑な HTML コードを記述する必要はありません。マスタ ページには、以下に示す既定のソース コードも含まれている必要があります。

<%@ master language="C#" compilewith="site.master.cs" 
  classname="ASP.site_master" %>
<html>
<head runat="server"><title>Untitled Page</title></head>
<body>
  <form runat="server">

    <asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
    </asp:contentplaceholder>
  </form>
</body>
</html>

これらの重要な変更点のほか、マスタ ページには、標準の ASP.NET ページで見られるあらゆる HTML やコントロールを含めることができます。

マスタ ページはフレームと用途が似ていますが、マスタ ページの方がはるかに高機能です。 マスタ ページでは、フレームとは違って、次のようなことが可能です。

  • ページをブックマークに登録して、既定のフレーム ページだけでなくそのページのすべての情報を再表示することができます。マスタ ページはフレームではありません。マスタ ページの照合コンテンツと、マスタを基に作成されたコンテンツ ページを含む、1 つのページです。したがって、その外観も動作も、フレームよりは 1 つの Web ページに似ています。
  • HTML ではなくコントロールやタグを使って作業することができます。Visual Studio を使用すれば、各フレームが正しく表示されるようにするために、フレーム タグの組み合わせに気を配ったり、無数の html 属性を変更したりする必要はありません。プレース ホルダを作成して、そのプロパティを Visual Studio で変更するだけで済みます。
  • Visual Studio のコード作成機能を活用して、視覚的にレイアウトをデザインしたりフレームを管理したりできます。コンテンツ ページをマスタ ページにリンクさせるための基礎コードを記述する必要もありません。新しいコンテンツを追加する場合も、ページ全体の HTML レイアウトへの影響を心配する必要はありません。

要するに、マスタ ページを使用することによって、Web アプリケーションの外観を統一する作業を、含まれるページの量に関係なく、大幅に簡略化できます。

コンテンツ ページ

マスタ ページにアタッチされるコンテンツ ページは、マスタ ページ内の ContentPlaceHolder コントロールのコンテンツを定義します。コンテンツ ページに含まれる <asp:content> コントロールは、ContentPlaceHolder ID を通じてマスタ ページの <asp:contentPlaceHolder> コントロールを参照します。コンテンツ ページとマスタ ページの組み合わせによって、1 つの応答が形成されます。

マスタ ページのコンテンツ ページ プレースホルダの例を以下に示します。

<%@ page language="VB" master="~/Mysite.master" %>
<asp:content id="Content1"  contentplaceholderid="LeftSideContent">
    <H2>Navigation </h2>
    <asp:treeview id="Navigation tree" 
      runat="server" 
      datasourceid="NavSource"/>
</asp:content>

<asp:content id="Content1"  contentplaceholderid="RightSideContent">
    <asp:label runat="server">Support section</asp:label>
</asp:content>

ここでも、ユーザーが実際に要求するのはコンテンツ ページです。ASP.NET はマスタ ページへの参照を検出し、マスタ ページのコンテンツをコンテンツ ページと一緒に表示します。

入れ子になったマスタ ページ

サイトのレイアウトやスタイルをより細かく制御するために、マスタ ページを入れ子にしなければならなくなる場合もあります。たとえば、企業の Web サイトのすべてのページに共通のヘッダーとフッターがある場合に、経理部門で、IT 部門とは若干異なるテンプレートを使用するとします。

Dd229412.migratingtoaspnet2_fig01(ja-jp,MSDN.10).gif
図 1. 入れ子になったマスタ ページ

このような場合は、個々の部門のマスタ ページを最上位の企業のマスタ ページの中に入れ子にすることによって、各部門で高度な一貫性を実現しつつ、コンテンツ ページとマスタ ページでオーバーライドできる要素を制御できます。

ここで覚えておくべき重要な点は、アプリケーションのコンテンツが複数のマスタ ページとコンテンツ ページで構成されている場合でも、エンド ユーザーは 1 つのページを要求し、1 つのページを受け取るということです。

マスタ ページのオーバーライド

マスタ ページの目的は、アプリケーションのすべてのページに一貫したルック アンド フィールを提供することですが、特定のページで一部のコンテンツをオーバーライドする必要が生じることも考えられます。コンテンツ ページのコンテンツは、単純にコンテンツ コントロールを使用してオーバーライドできます。

マスタ ページを動的にオーバーライドするには、MasterPage クラスのパブリック プロパティを、自分で作成したものも含めて、プログラムで公開する必要があります。これにより、たとえば HTML ページの <head> セクションの <title> プロパティと <keyword> プロパティをオーバーライドしたい場合は、マスタ ページで設定されている既定のプロパティを編集するための関数を作成できます。master.site 構成ファイルの動的な <head> セクションの例を以下に示します。

<head runat="server" id="Head1"> 
   <title><% =m_HtmlTitle %></title>
     <meta name="keywords" content="<% =GetKeywords() %>" > 
     <meta name="description" 
        content="A newsletter focused on meeting the needs of .NET
               developers, providing cool tips for the advanced 
               programmer, and keeping
               you informed on what's happening with .NET!" > 
     <LINK href="<% =Request.ApplicationPath %>/portal.css"
           type="text/css" rel="stylesheet">

</head> 

テーマとスキン

現在、ASP 開発者が Web サイトのルック アンド フィールを制御するには、カスケード スタイル シート (CSS) とインライン スタイルを使用するしかありません。これらの技術も役には立ちますが、この場合の一貫性は、主として、開発者が正しいスタイルを使用するかどうかにかかっています。ASP.NET 2.0 では、Web サイトのすべてのページとコントロールに一様に適用されるテーマとスキンを使用することによって、この点が改められています。

テーマ

テーマは、対象となるすべてのページに適用される共通の属性のセットを定義するという点では、CSS スタイル シートに似ています。しかしテーマは、次のような点でスタイル シートとは異なります。

  • 特定のスタイル プロパティのセットだけでなく、コントロールやページのさまざまなプロパティを定義できます。
  • CSS スタイル シートには含めることのできない補助的なファイル (グラフィックスなど) を含めることができます。
  • スタイル シートのようにカスケードしません (たとえば、テーマのプロパティ値は常にローカルのプロパティ値をオーバーライドします)。
  • スタイル シートの参照を含めることができます。

各アプリケーションに 1 つずつ Themes ディレクトリがあり、そこに各テーマごとに専用のサブディレクトリがあります。スタイルに適用されるスキン ファイルやその他のファイルは、このサブディレクトリに含まれています。

テーマの定義

テーマとスキンを定義して、Themes ディレクトリから分岐するサブディレクトリに配置することができます。各サブディレクトリが 1 つのテーマを構成します。テーマ サブディレクトリには、.skin ファイルやその他のリソース (テーマで使用するイメージ ファイルやスタイル シートなど) が含まれています。

Dd229412.migratingtoaspnet2_fig02(ja-jp,MSDN.10).gif
図 2. Themes ディレクトリのサブディレクトリ

実際のスキン定義は .skin ファイルに含まれており、ASPX ファイルでコントロール インスタンスの宣言に使用するタグによく似ています。

例として、Themes ディレクトリに Pink というサブディレクトリを作成してみましょう。このカスタム テーマの .skin ファイルは、ファイルに次のコードを追加して Pink ディレクトリに保存するだけで簡単に作成できます。

<asp:DropDownList runat="server" BackColor="hotpink" ForeColor="white" />
<asp:DataGrid runat="server" BackColor="#CCCCCC" BorderWidth="2pt"
    BorderStyle="Solid" BorderColor="#CCCCCC" GridLines="Vertical"
    HorizontalAlign="Left">
      <HeaderStyle ForeColor="white" BackColor="hotpink" />
      <ItemStyle ForeColor="black" BackColor="white" />
      <AlternatingItemStyle BackColor="pink" ForeColor="black" />

</asp:DataGrid>

これで、このテーマをアプリケーションのページに適用できます。もちろんこのテーマでは、データ グリッドの背景がピンクに変わります (お望みの効果ではないかもしれませんが)。

テーマの使用

テーマは次のような形で適用できます。

  • 1 つのタグを使ってページ レベルで適用する (例: <% @page language="VB" theme="Pink" %>)。
  • Web.config ファイル内の構成要素を使ってサイト全体で適用する (例: <pages theme="Pink" />)。Web.config ファイルは、各 ASP.NET アプリケーションのマスタ構成ファイルです。

ここで、図 3 の一般的なカレンダー コントロールを使って、テーマの効果を確認してみましょう。

Dd229412.migratingtoaspnet2_fig03(ja-jp,MSDN.10).gif
図 3. Basic Blue テーマを設定したカレンダー

このバージョンのカレンダーは Basic Blue テーマを使用しています。テーマの属性を変更するだけで、このカレンダーの外観が一変します (図 4 を参照)。

Dd229412.migratingtoaspnet2_fig04(ja-jp,MSDN.10).gif
図 4. Smoke and Glass テーマを設定したカレンダー

スキン

スキンとはプロパティとテンプレートのセットであり、これを使用して、ページ上のコントロールのサイズ、フォント、およびその他の特性を標準化できます。スキンを使用してコントロールの表示設定をあらかじめ定義しておき、実行時に適切なスキンを適用できます。たとえば、ユーザー設定に基づいてスキンを選択したり、ページへのアクセスに使用されているブラウザに基づいて適切なスキンを判断したりできます。定義済みのコントロールにオプションのスキンを適用するには、SkinId プロパティを設定します。

<!- Default Skin -->!>

<asp: label runat="server" Font-names="verdana, arial" font-size="10pt"
      ForeColor= "#000066" BackColor="transparent"
/>
<!- Title Skin -->!>
<asp: label runat="server" id="foo" skinid="Title" Font-names="verdana, arial"
      font size="18pt" ForeColor= "#000066" BackColor="transparent" 
font-bold="true"
      font-underline="true"
/>

いったん定義したスキンは、ページ上のすべてのコントロールに適用することも、テーマと SkinID プロパティを使用して特定のコントロールに適用することもできます。このプロパティは、すべてのスキン対応コントロールに組み込まれています。

コントロールへのスキンの適用

既定のスキンが存在し、ページがテーマによって定義されている場合は、自動的に既定のスキンがコントロールに適用されます。コントロールの SkinID プロパティを定義すると、既定のスキンが、SkinID プロパティで参照されているスキンに置き換わります。このプロパティは、開発時に構成することも、実行時に構成することもできます (ページの更新を使用)。

サイト ナビゲーション

Web サイトで快適なユーザー エクスペリエンスを提供するには、一貫したナビゲーションが欠かせません。従来の ASP アプリケーションでは、ハイパーリンクや、ハイパーリンクをカプセル化したユーザー コントロールを追加するしかありませんでした。これらのハイパーリンクは作成するのにとても時間がかかるうえ、アプリケーション内でページを新しい場所に移動した場合によく問題になります。ASP.NET 2.0 には、サイト ナビゲーションを改善し、Web ページの物理的な場所の変更に伴う保守作業を軽減する、数々の新機能が導入されています。

ASP.NET 2.0 では、アプリケーションのナビゲーションを論理構造に基づいて定義できます。ナビゲーションに論理構造を使用すると、サーバー上の各ページの物理的な場所に依存することなく、Web ページを互いに論理的に関連付けることによって、アプリケーションのナビゲーション パスを作成できます。ナビゲーションを論理的に編成することによって、コードを一切変更せずにアプリケーションのナビゲーションを再編成できるようになります。また、この論理構造を使用して、ツリー ビュー、メニュー、"ブレッドクラム" の経路などのナビゲーション補助機能を作成することもできます。

Web.sitemap ファイル

ASP.NET 2.0 の SiteMap クラスは、Web サイトの論理構造を公開します。基になる構造は、ASP.NET 2.0 に含まれているサイト ナビゲーション プロバイダで XML を使用して定義することも、カスタム プロバイダで他のデータ形式を使用して定義することもできます。いったんレイアウトを定義したら、そのナビゲーション構造をさまざまな形で使用できます。

論理構造は、次の 2 段階の手順で簡単に作成できます。

  1. サイトのページの配置を階層構造で示す Web.sitemap という XML ファイルを作成します。新しい .sitemap ファイルは、Visual Studio 2005 で作成できます ([新しい項目の追加] をクリックし、サイトマップ テンプレートを選択します)。.sitemap ファイルの編集時には、IntelliSense もサポートされます。XML app.sitemap の例を以下に示します。

    <?xml version="1.0" encoding="utf-8" ?> 
    <siteMap>
       <siteMapNode title="Home" url="default.aspx">
    
              <siteMapNode title="Article 1"
                 url="~/articles/demoarticle1.aspx" />
              <siteMapNode title="Article 2" 
               url="~/articles/demoarticle2.aspx" />
       <siteMapNode title="Article 3"  url="~/articles/demoarticle3.aspx" />
       </siteMapNode>
    
       <siteMapNode title="Picture Gallery" url="~/PhotoAlbum/PhotoAlbums.aspx">
              <siteMapNode title="Meetings" 
               url="~/PhotoAlbum/PictureAlbum.aspx?albumid=1"/>
              <siteMapNode title="Activities"
                url="~/PhotoAlbum/PictureAlbum.aspx?albumid=2"/>
              <siteMapNode title="Training" 
               url="~/PhotoAlbum/PictureAlbum.aspx?albumid=3"/>
       </siteMapNode>
       </siteMapNode>
    
    </siteMap>
    
  2. SiteMapDataSource コントロールをツールボックスからページ上にドラッグ アンド ドロップします。SiteMapDataSource コントロールは、Web.sitemap ファイルに含まれている論理サイト構造に自動的に連結されます。

いったんページ上に配置した SiteMapDataSource コントロールは、treeview コントロールや menu コントロールなどの他のコントロールに簡単に連結できます。

<%@ page language="VB" master="~/Mysite.master" %>
  <asp:content id="Content1" contentplaceholderid="LeftSideContent">
    <H2>Navigation </h2>
    <asp:treeview id="Navigation tree" runat="server" 
       datasourceid="NavSource"/>
 </asp:content> 

このツリー ビューでは、app.sitemap ファイルの定義に基づいてサイト ナビゲーションが階層的に表示されます。

ナビゲーション コントロール

ASP.NET 2.0 には、サイト ナビゲーション サービスで使用できる一連のナビゲーション コントロールも導入されています。<asp:TreeView> コントロールや <asp:Menu> コントロールを使用すると、アプリケーションのナビゲーション構造を視覚化することができます。新しい <asp:SiteMapPath> コントロールでは、"ブレッドクラムの経路" のナビゲーション構造を生成できます。

Dd229412.migratingtoaspnet2_fig05(ja-jp,MSDN.10).gif
図 5. Home | Articles | Article 2 ページのブレッドクラムの経路

URL マッピング

URL マッピングもまた、ASP.NET 2.0 のナビゲーション関連の新機能の 1 つです。Web サイトでは、長くて複雑で見づらい URL が必要になることがよくあります (MSDN の参照などはまさにそうです)。ASP アプリケーションで URL を隠すには、カスタム ISAPI ハンドラを作成して要求を事前に処理しなければなりませんでした。ASP.NET 2.0 では、Web.config ファイルに URLMapping という構成セクションが追加されています。開発者はマッピングを定義して、実際の URL を隠してユーザーにわかりやすい URL にマップすることができます。URLMapping 構成セクションの例を以下に示します。

<urlMappings enabled="true">

    <add url="~/Home.aspx" mappedUrl="~/Default.aspx?tabid=0" />
</urlMappings>

上の構成では、Home.aspx に対するすべての要求が Default.aspx?tabid=0 にマップ (およびリダイレクト) されます。ユーザーがブックマークに登録したりユーザーのブラウザに表示されたりするのは、短い方のリンクになります。

データ アクセスの合理化

ほとんどの Web サイトは、情報の永続化、トランザクションの記録、動的データの格納などのためにデータベースを必要とします。従来の ASP アプリケーションでは、データベースにアクセスしたりデータベースを更新したりするためのコードを記述しなければならないほか、取得したデータをブラウザで利用しやすいように HTML としてフォーマットする必要もあります。ページングや並べ替えなどの高度な機能では、バックエンドのコードとフロントエンドの表示の複雑な同期も必要になります。こうしたコードは保守や同期が難しい場合がほとんどで、データベースが変更される場合や、ページに追加のデータを表示しなければならない場合には、特にその傾向が強くなります。

ASP.NET 2.0 では、データのアクセスや表示に必要なコードを減らすために、新しいデータ コントロールに機能をカプセル化しています。従来の ASP では手動でデザインしなければならなかった機能の多く (ページングや並べ替えなど) が、これらの新しいデータ コントロールに組み込まれています。また、新しいデータ アクセス アーキテクチャは拡張性も非常に高く、さまざまなソース (データベース、XML ファイル、フラット ファイル、データ ストリームなど) のデータにアクセスできるように作られています。

DataSource コントロール

DataSource のサブクラスは、ASP.NET 2.0 の新しいデータ コントロールの中でも最も強力です。これらのコントロールを使用すると、データベース、XML ファイル、またはその他のデータ ソースに対する接続を、宣言によって構成できます。これにより、カスタム コードを一切使用せずにデータ ソースのデータを取得したり更新したりできます。プログラマは、データ ソースの構成ウィザードのグラフィカル インターフェイスを使用して、データ ソースを構成するための詳細情報をごく簡単な手順で定義できます。後は ASP.NET 2.0 によって、リソースに接続するためのコードやパラメータに基づくクエリが、必要に応じて自動的に生成されます。自動生成されたコードは .ASPX ファイルに保存されます。たとえば、SQLDataSource 用の .ASPX ファイルに保存されているコードには、接続文字列の属性と SQL ステートメントが含まれています。

データ ソースの構成ウィザードによって自動生成された SQLDataSource の構成の例を以下に示します。

<asp:sqldatasource
  id="SqlDataSource1"
  runat="server"
  selectcommand="select customerid, companyname from customers"
  providername="System.Data.OleDb" 
     connectionstring="Provider=SQLOLEDB.1;Integrated Security=SSPI; 
     Initial Catalog=Northwind; Data Source=localhost; 
     Auto Translate=True; Use Encryption for Data=False>
</asp:sqldatasource>

データの連結

データ ソースの準備ができたら、次にデータ ソースをコントロールにリンクさせます。これを、データの連結と呼びます。データ ソースから抽出された値をコントロールのプロパティにリンクさせたり、表、リスト、グリッドなどの値として使用したりできます。

ASP.NET 2.0 では、さまざまなコントロールに対する豊富なデータ連結がサポートされています。たとえば、XML データ ソースを、<ASP:DropDownList><ASP:DataList> <ASP: GridView> およびその他さまざまなデータ コントロールに連結できます。

たとえば、従来の ASP でドロップダウン リストを設定するには、ページに値をハードコーディングするか (以下のコードを参照)、データベースに接続し、データを取得して、それをドロップダウン リストに設定するためのコードを記述する必要があります。ドロップダウン リストを手動で設定する場合は、データが更新されるたびにコードを (手作業で) 変更しなければなりません。

<select size="1" name="dropdown_menu">
  <option value="1" >test_data1</option>
  <option value="2">test_data2</option>
  <option value="3">test_data3</option>

  <option value="4">test_data4</option>
</select>

データベース テーブルにアクセスしてリストを設定する場合は、情報を取得するためのコードを記述する必要があるほか、ページが読み込まれたり、情報がセッションに格納されたりするたびに、アプリケーションでデータベースへのトリップが必要になります。以下に例を示します。

Set oConn = Server.CreateObject("ADODB.Connection")
Set oRs = Server.CreateObject("ADODB.Recordset")
oConn.Open "DSN=droplist_ex"
strSQL = "SELECT * "
strSQL = strSQL & "FROM priority_types"
oRs.Open strSQL, oConn, adOpenKeyset, adLockOptimistic 
WHILE NOT oRs.EOF
         prioritytypes = prioritytypes & 
         "<option value=" & oRs("priority_id") & ">" 
            &oRs("priority_name") & "</option>"
oRs.MoveNext
WEND
oRs.Close
oConn.Close

さいわい ASP.NET では、データにアクセスしてコントロールに連結するためのメカニズムが、はるかに単純になっています。

ASP.NET 2.0 におけるコントロールへの連結

ASP.NET 2.0 では、コードを一切記述せずにドロップダウン リストを XML ソースやデータベースに連結することができます。データ ソースの構成ウィザードを使用すると、ソースに関係なく同じ方法でデータをコントロールに連結できます。

Dd229412.migratingtoaspnet2_fig06a(ja-jp,MSDN.10).gif

Dd229412.migratingtoaspnet2_fig06b(ja-jp,MSDN.10).gif
図 6a および 6b. データ ソースの構成ウィザードによるドロップダウン リストへの連結

データ ソースの構成ウィザードによって、Web.config ファイルに次のコードが生成されます。

<asp:xmldatasource id="XmlDataSource1" 
     datafile="msdn.xml" 
     xpath="rss/channel/item" 
     runat="server" 
/>

ASP.NET 2.0 では、データ コントロールを直接ビジネス オブジェクトに連結することもできます。ObjectDataSource コントロールを使用すると、プレゼンテーション層とデータ層の間にビジネス層を作成して、Web サービスを利用したりカスタム データ ソースを作成したりしてより複雑な状況を扱うことができます。

ASP.NET 2.0 の新しいデータ アクセス機能の詳細については、「ASP.NET 2.0 におけるデータ アクセス」を参照してください。

メンバシップ

ASP 開発の大きな欠点の 1 つは、ユーザー管理の枠組みをゼロから作成しなければならないことです。このプロセスは複雑なだけでなく、多くの時間を必要とします。ASP.NET 2.0 では、メンバシップ プロバイダとログイン コントロールを使用して、統一された方法でユーザー情報を管理できます。

ユーザーがアプリケーションにログインするたびに、そのユーザーの ID と基本的なユーザー情報が自動的に参照されます。ユーザーの資格情報は、バックエンドのユーザー データベースに安全に格納されます。このデータベースは、Web.config ファイルで構成できます。ASP.NET 2.0 には Microsoft Access と Microsoft SQL Server の両方のプロバイダが用意されており、すぐに利用できるようになっていますが、カスタム プロバイダを作成すれば、あらゆる種類のバックエンド データ ストアを使用できます。既存のアカウント データベースを ASP.NET のメンバシップ機能と一緒に使用したい場合などには、この拡張性が大いに役立ちます。アプリケーションのメンバシップを構成できたら、ASP.NET 2.0 のログイン コントロールを使用して、ユーザーの登録とパスワードの取得を自動化できます。

ログイン コントロール

ASP.NET 2.0 の新しいログイン コントロールを使用すると、コードを一切記述せずにユーザー アカウントの作成や管理を行うことができます。<asp:CreateUserWizard> コントロールをページ上にドラッグするだけで、ユーザー登録フォームを作成できます。このフォームは、ステップ バイ ステップのウィザードでユーザーに登録プロセスを案内します。

新しいログイン コントロールでは、直感的なインターフェイスを使って、コントロールをアプリケーションのデザインに合わせてフォーマットできます。プロパティ ウィンドウでは、各プロパティのラベル、値、およびエラー メッセージ検証要素にアクセスできます。LoginName コントロールと LoginStatus コントロールを使用すると、ユーザーごとに異なるウェルカム メッセージを表示したり、コードを一切記述せずにログイン/ログアウト機能を作成したりできます。

LoginView コントロールでは、どのユーザーに対してどのコンテンツを表示すればよいかを、1 行もコードを書かずに特定できます。各ユーザーの状態とロールから適切なビューを特定することによって、コンテンツが表示されます。従来の ASP アプリケーションでこれを行うには、現在のユーザーを識別するためのコード、ユーザーの状態を確認するためのコード、ユーザーに基づいてコンテンツを表示するためのコードなど、多くのコードを記述しなければなりません。

Web パーツの詳細については、「ASP.NET 2.0 のパーソナライゼーション機能」を参照してください。

ユーザー管理

ASP.NET 2.0 には、Web サイトの管理に利用できる組み込みの Web アプリケーションが含まれています。この ASP.NET Web サイト管理ツールには、ASP.NET のさまざまな機能のデータベースの構成を自動的に設定できるウィザードが用意されています。また、このツールを使用して、バックエンドのデータベースにユーザーを追加することもできます。

拡大するにはここをクリックしてください。
図 7. Web サイト管理ツール

ASP.NET 2.0 には、ユーザー名とパスワードの管理のためのサポートが組み込まれています。 カスタムのロールやグループを作成して、ASP.NET 2.0 に付属の Microsoft Access データベースに格納できます (ASP.NET 2.0 を構成すれば、この情報をあらゆる種類のデータベースに格納できます)。これらのロールの更新や保守は、コードを 1 行も書くことなく、Web サイト管理ツールを使って簡単に行うことができます。

パーソナライゼーションの詳細については、「ASP.NET 2.0 のパーソナライゼーション機能」を参照してください。

プロファイル

ASP.NET 2.0 のプロファイル機能を使用すると、Web サイトを訪問するユーザーに関連付けられた情報の定義、保存、および取得を行うことができます。従来の ASP アプリケーションでは、ユーザーに関するデータを収集し、ユーザー セッションの間そのデータをセッションに格納し、ユーザーが Web サイトを離れたらそのデータを永続的なデータ ストアに保存するためのコードを、独自に開発しなければなりません。ASP.NET 2.0 では、これらすべての機能が、プロファイルによって自動化されています。プロファイルの本質は、ユーザーに関連付けられた情報のバケットです。この情報には、すべての ASPX ページに公開される Profile オブジェクトを通じて直接アクセスできます。

プロファイルの定義

プロファイルは、machine.config または Web.config で、各ユーザーの名前、請求先住所、電子メール アドレスなどの情報を表す <property> 値を使って定義できます。論理プロパティのグループを作成することも可能です。以下に例を示します。

<profile>
  <group name="BillingAddress">
    <add name="Street" type="System.String" />
    <add name="City" defaultValue="Toronto" type="System.String" />
    <add name="StateProv" type="System.String" />
    <add name="ZipPostal" type="System.String" />

  </group>
</profile>

いったんプロファイルを定義すれば、後は ASP.NET とプロファイル プロバイダによってその情報が自動的に管理されます。要求時の読み込みやユーザーがサイトを離れるときの格納も自動的に行われます。

プロファイルの使用

プロファイルを定義すると、Visual Studio 2005 によってプロファイルのプロパティが Profile オブジェクトを通じて自動的に公開されます。

Dd229412.migratingtoaspnet2_fig08(ja-jp,MSDN.10).gif
図 8. プロファイルの使用

また、Visual Studio 2005 では、プロファイルで IntelliSense が完全にサポートされます。プロファイルの定義を変更した場合も、Web.config ファイルを保存するとすぐ、自動的に正しい IntelliSense が提供されるようになります。

Web パーツ

デスクトップ アプリケーションでは、構成可能な複数のコンポーネントを簡単に含めることができます。この点はこれまで、Web アプリケーションとデスクトップ アプリケーションの重要な違いの 1 つとなっていました。たとえば Visual Studio では、どのウィンドウを表示し、ウィンドをどのように配置するかを、ユーザーが決めることができます。同様の機能を Web サイトで開発するのは容易なことではありません。

ASP.NET 2.0 では、Web パーツという形でこの問題が解決されています。Web パーツは、必要なものだけを使用して生産性の高いインターフェイスを作成するために、ユーザーが自由に取り入れて配置することができるモジュール コンポーネントです。ユーザーは、たとえば次のようなことを行うことができます。

  • 表示するパーツの選択
  • 任意の順序または配置でのパーツの構成
  • 複数の Web セッション間でのビューの保存
  • 特定の Web パーツの外観のカスタマイズ

これらの機能はどれも、通常の Web アプリケーションで実装することは実質的に不可能です。

Web パーツは、Web ページのモジュール ブロックと見なすことができます。各ブロックは、実行時に動的に Web ページに追加したりページから削除したりすることができます。Web パーツの編成や操作に使用するコードは、ASP.NET 2.0 に組み込まれています。レイアウトの追加、削除、および構成を行う機能はすべて、Web パーツ システムにより自動的に処理されます。プログラマは、単に Web パーツを構築して、Web パーツ ゾーンに割り当てます。ユーザーは Web パーツを組み合わせて使用したり、任意の順序で表示することができます。変更した構成は、他のサイトを表示した後も維持されます。

Web パーツの使用

たとえば病院用の Web パーツ アプリケーションでは、患者の現在の状態から薬の相互作用に関する警告に至るさまざまな表示コンポーネントを、ユーザーが選択して表示できるようにすることができます。各ユーザーは、表示するパーツをカタログから選択します。

Dd229412.migratingtoaspnet2_fig09(ja-jp,MSDN.10).gif

図 9. Web パーツ カタログ

その後、コントロールをドラッグして、それぞれのニーズに合った形で配置できます。

Dd229412.migratingtoaspnet2_fig10(ja-jp,MSDN.10).gif
図 10. Web パーツの配置

レイアウトと構成は、ユーザーが次に訪れるときのために自動的に保存されます。Web パーツの詳細については、「ASP.NET 2.0 のパーソナライゼーション機能」を参照してください。

コンパイル オプション

ASP.NET 2.0 には、Web アプリケーションのためのコンパイル モデルが 4 つ用意されています。

  1. 標準 (ASP.NET 1.x)。通常の ASP.NET Web アプリケーションでは、分離コード ファイルがアセンブリへとコンパイルされて、/bin ディレクトリに格納されます。Web ページ (ASPX) は要求時にコンパイルされます。このモデルは、ほとんどの Web サイトで問題なく機能します。ただし、ASP.NET ページが初めて要求されたときには、コンパイル プロセスのために、その後の要求に比べて処理が遅くなります。このコンパイル モデルは、ASP.NET 2.0 でも引き続きサポートされています。
  2. バッチ コンパイル。ASP.NET 2.0 では、1 つの URL 要求でアプリケーションをバッチ コンパイルすることができます。ASP.NET 1.x と同様に、バッチ コンパイルを利用すると最初のページ要求の処理の遅れはなくなりますが、起動時のサイクル タイムが長くなります。また、分離コード ファイルを配置前にコンパイルする必要があることに変わりはありません。
  3. プリコンパイル配置。ASP.NET 2.0 の新機能として、配置前にプロジェクトを完全にコンパイルすることができます。完全なコンパイルでは、分離コード ファイル、ASPX ページ、HTML、グラフィック リソース、およびその他のバックエンド コードがすべて、1 つ以上の実行可能アセンブリにコンパイルされます (アセンブリの数はアプリケーションのサイズやコンパイルの設定によって変わります)。これらのアセンブリには、Web サイトのコンパイル済みコードがすべて含まれています。リソース ファイルと構成ファイルは変更されずにコピーされます。このコンパイル方法では、最大限のパフォーマンスとセキュリティが得られる反面、配置後に Web サイトを一切変更できなくなります。多くの人の目に触れる Web サイトや、高度なセキュリティが要求される Web サイトでは、最終的な配置の選択肢としてこのオプションが最適です。一方、ローカル イントラネットで実行される小規模なサイトを開発していて、サイトが頻繁に変更されるような場合には、完全なプリコンパイルは過剰な処置といえます。
  4. 完全な実行時コンパイル。プリコンパイル配置の対極に位置するオプションとして、ASP.NET 2.0 には、アプリケーション全体を実行時にコンパイルするための新しいメカニズムが用意されています。コンパイルされていない分離コード ファイルやその他の関連コードを、新たに用意された \code ディレクトリに配置すると、ASP.NET 2.0 によってアセンブリへの参照が作成され、管理されます。アセンブリは、それらのファイルから実行時に生成されます。このオプションでは、Web サイトのコンテンツの変更に関して最大限の柔軟性が得られますが、コンパイルされていないコードをサーバーに置くことになります。

どのコンパイル オプションが最適かは、個々の状況やニーズによって異なります。ただし、コンパイル モデルの柔軟性は変わりません。\code ディレクトリを使用して分離コード ファイルを格納するように選択した場合でも、完全なコンパイルの方法を使ってアプリケーションを配置できます。

管理

ASP.NET 2.0 には、配置、構成、および管理の容易なアプリケーションを開発するための新機能がいくつか含まれています。これらのツールを使用することにより、より堅牢で保守の容易なアプリケーションを作成することができます。

Microsoft 管理コンソールの管理ツール

従来の ASP アプリケーションでは、IIS の設定は IIS マネージャを使って手動で変更する必要があります。ASP.NET 2.0 には使いやすい MMC 管理ツールが含まれており、これを使って IIS の構成設定を変更できます (管理者権限が必要です)。MMC の [IIS] タブでは、アプリケーションで使用する ASP.NET のバージョンを選択できます。また、Web.config の場所も表示されます。さらに、[Edit configuration] ボタンをクリックするとポップアップ ウィンドウが開き、Web.config のほとんどの設定を視覚的に編集できます。Web.config XML ファイルを操作する必要はありません。

構成 API

構成情報の取得や編集には、System.Configuration.Configuration クラスを使用できます。これらの API を使用すると、XML 構成ファイルを使って構成できるあらゆる要素をプログラムで制御できます。これにより、カスタム管理ツールを開発することができます。たとえば次のコードでは、ローカル コンピュータ上のアプリケーションで有効になっている認証の種類が表示されます。

// C#

Configuration cfg = 
  Configuration.GetConfigurationForUrl("/Application_name"); 
Response.Write( cfg.Web.Authentication.Mode.ToString() );

Visual Basic .NET

Dim cfg As Configuration = 
  Configuration.GetConfigurationForUrl("/Application_name") 
Response.Write( cfg.Web.Authentication.Mode.ToString() )

次のコードは、ローカル Web アプリケーションでフォーム認証を有効にします。

// C#

Configuration cfg = 
  Configuration.GetConfigurationForUrl("/MyApp");
cfg.Web.Authentication.Mode = 
  HttpAuthenticationMode.Forms; cfg.Update(); 

Visual Basic .NET

Dim cfg As Configuration = 
  Configuration.GetConfigurationForUrl("/MyApp") 
cfg.Web.Authentication.Mode = 
  HttpAuthenticationMode.Forms cfg.Update()

構成の暗号化

ASP.NET 2.0 には、構成ファイルのほとんどのセクションを暗号化できる暗号化サービスが用意されています。暗号化を利用することにより、アプリケーション内に従来より安全にプライベートな情報を格納できます。Web.config ファイルのセクションを暗号化して、重要な情報をすべて保護することができます。

構成セクションの暗号化を行う場合は、Triple DES などの米国政府の標準の暗号化アルゴリズムを利用できます。暗号化されたデータは構成ファイルに格納されるため、アプリケーションがレジストリに依存することはありません。

スケーラビリティとパフォーマンス

ASP.NET 2.0 の主要な目標の 1 つは、従来より実行速度が速く、多くのユーザーをサポートできるページを作成できるようにすることです。この目標を達成するために、ASP.NET 2.0 では新しいキャッシュ システムが採用されているほか、64 ビット プロセッサのサポートも強化されています。また、IIS 6.0 のパフォーマンスの強化も活用されています。

強化されたキャッシュ

ASP.NET 2.0 では、情報をメモリにキャッシュしてアプリケーションの実行を高速化することができます。従来の ASP アプリケーションでは、データのキャッシュは非常に複雑で難解なプロセスになっていました。ASP.NET 2.0 では、より拡張性の高いキャッシュ依存関係が開発されており、キャッシュ エントリの有効期限を自動的に管理できるカスタム キャッシュ依存関係を、ほとんどコードを書かずに作成できます。

データドリブン アプリケーションで最もコストの高いリソースの 1 つが、データベースへのアクセスです。ASP アプリケーションでは、データベースから取得したデータをキャッシュすると、システム リソースを大幅に削減できる一方で、古くなったデータが利用される可能性があります。SQL キャッシュの無効化では、古くなったデーがキャッシュに残らないようにするために、キャッシュされた SQL 情報がデータベースで変更されると、自動的に再読み込みが行われます。これはとても強力な機能です。たとえば、SQL キャッシュに製品カタログ全体を格納すれば、アプリケーションの実行速度が劇的に向上します。データベースでカタログに変更が加えられた場合は、自動的にキャッシュがフラッシュされて再読み込みされます。

アプリケーションに動的なコードが含まれているために、キャッシュされた情報を使用できない場合もよくあります。ASP.NET 2.0 では、キャッシュ後の置換を行うことができます。キャッシュ後の置換では、ページに "プレース ホルダ" コントロールを追加することによって、キャッシュされたページに実行時に動的にテキストを追加できます。

キャッシュの強化の詳細については、「ASP.NET 2.0 でのキャッシングの改善」を参照してください。

強化された拡張性

ASP.NET 2.0 では、API を実装するコンポーネントによって ASP.NET の既存の機能に変更を加えることができる新しいプログラミング モデルがサポートされています。ASP.NET 1.X では、ASP.NET 2.0 のプロバイダ モデルの原型をセッション状態で利用することができました。

プロバイダ

プロバイダは、ASP.NET 2.0 の非常に強力な機能です。プロバイダの目標は、機能のビジネス ロジックとデータ アクセス ロジックをパブリック API から分離することです。パブリック API は、ASP.NET 開発者に公開されます。これにより開発者は、独自のビジネス層やデータ層を作成して、ASP.NET にプラグインすることができます。機能のパブリック API を利用する ASP.NET ページのコードには、一切変更を加える必要はありません。

プロバイダ モデルは、メンバシップ、ロール マネージャ、プロファイル、Web パーツ パーソナライゼーション、サイト ナビゲーション、サイト カウンタ、セッション状態、Web イベントなど、ASP.NET 2.0 の新機能の多くでサポートされています。ASP.NET の特定の機能のロジック、動作、およびデータのやり取りを、独自に作成したカスタム プロバイダの実装と完全に入れ替えることができます。

プロバイダ モデルの好例となるのがメンバシップ プロバイダです。ASP.NET 2.0 のメンバシップ機能には、Membership.ValidateUser() という静的メソッドがあります。しかし、このメソッドのビジネス ロジックは、Membership クラスには一切含まれていません。代わりに Membership クラスは、ValidateUser の呼び出しを、構成済みのメンバシップ プロバイダに転送します。メンバシップ プロバイダ クラスには、ValidateUser メソッドを実行するために必要なビジネス ロジックとデータ アクセス ロジックがすべて含まれています。したがって、ユーザーの確認方法を変更する場合は、新しいメンバシップ プロバイダ クラスを作成して、アプリケーションに登録するだけで済みます。

プロバイダの実装は、特定の機能の API コントラクトを定義するために使用されている抽象基本クラスから派生している必要があります。たとえば、Oracle のメンバシップ プロバイダを作成するには、OracleMembershipProvider という新しいクラスを作成します。このクラスは、それ自体 ProviderBase 基本クラスから派生する MembershipProviderBase から派生している必要があります。ProviderBase クラスは、すべてのプロバイダに共通の実装コントラクトを定義します。

まとめ

ASP.NET 2.0 には、より強力かつ高速で、信頼性が高く、顧客のニーズに応じて拡張可能な Web アプリケーションを作成するために必要なツールが用意されています。従来の ASP アプリケーションでは、データベース アクセス、ユーザー管理、セキュリティなどの一般的なタスクに対しても、長大なコードを記述しなければなりません。ASP.NET 2.0 には、1 行もコードを書かずに実装できるドラッグ アンド ドロップ コントロールが含まれています。

ASP.NET 2.0 には、一貫したルック アンド フィールを備えたアプリケーションを開発するのに役立つコントロールが含まれています。マスタ ページ、テーマとスキン、およびナビゲーション コントロールを使用してテンプレート ページを作成すると、新しいページを作成するたびにコードを再生成する必要がなくなります。これらの新しいコントロールを使用すれば、デザインを変更する際にも、メイン テンプレートを更新するだけでアプリケーションが自動的に更新されます。

従来の ASP アプリケーションでは、すべてのユーザーに同じコンテンツが表示されます。ASP.NET 2.0 では、パーソナライゼーション機能を使用して、表示されるコンテンツをユーザーごとにカスタマイズすることができます。Web パーツとプロファイルを使用すると、各ユーザーのパーソナライゼーション情報を格納し、その情報に基づいてパーソナライズされた UI を表示することができます。

ASP.NET 2.0 では、コードのコンパイル方法にもいくつかの変更が加えられています。従来の ASP ページでは、ロジックとデザイン コードが 1 つのファイルに組み合わさっています。ASP.Net では、デザイン コードをロジックから分離することができます。ASP.NET 2.0 には、アセンブリをデザイン時ではなく実行時にコンパイルできる \Code ディレクトリが追加されており、2 とおりの方法でコードをコンパイルできるようになっています。つまり、アプリケーションをプリコンパイルすることも、実行時にコンパイルすることもできます。

ASP.NET 2.0 には、より高速なアプリケーションの開発を支援するコントロールが導入されています。SQL キャッシュの無効化とキャッシュ後の置換を実装すると、データベースへのトリップを大幅に減らすことができます。また、ASP.NET 2.0 アプリケーションは拡張性も大幅に向上しています。プロバイダ モデルを活用してカスタム プロバイダを作成すると、任意のカスタム データ ソースと通信できるカスタム データ層を作成できます。

参考書籍

執筆者紹介

Jayesh Patel は、.NET および Java テクノロジの開発者です。パターン ベース プログラミングとアジャイル方法論を中心とする研究に取り組んでいます。

Bryan Acker は Infusion Development のテクニカル ライターです。ASP および ASP.NET の Web 開発や Web ホスティングに関する豊富な経歴を持っています。

Robert McGovern は Infusion Development のシニア ライターであり、開発者兼プロジェクト マネージャでもあります。『CodeNotes for ASP.NET』や『JSP to ASP.NET migration guide』など、さまざまな ASP.NET プロジェクトに参加しています。

Microsoft 公認ソリューション プロバイダの Infusion Development Corporation は、金融サービス業を中心とする Fortune 1000 の企業を対象に、カスタマイズ ソフトウェアの開発、トレーニング、コンサルティングなどのサービスを提供しています。ニューヨークとトロントに拠点を置く同社は、金融サービス、証券取引、およびソフトウェア開発の各業界における世界有数の企業を始めとする、国際的な顧客ベースを確立しています。Infusion Development の従業員は、CodeNotes シリーズの書籍の執筆や制作にも携わっています。