ASP.NET 2.0 のパーソナライゼーション機能

Jayesh Patel, Bryan Acker, Robert McGovern
Infusion Development

July 2004

適用対象:
   ASP.NET 2.0
   ASP.NET フレームワーク
   Visual Studio 2005

概要: ASP.NET 2.0 の新しいパーソナライゼーション機能を使用して、パーソナライズされたアプリケーションをすばやく作成し、まったく新規のアプリケーションのクラスを構築します。

目次

はじめに
ユーザの識別および管理
カスタム ユーザー エクスペリエンスの作成
単純な Web パーツ
派生 Web パーツ
インターフェイスの実装
プロバイダによるユーザー データの保存
カスタム メンバシップ プロバイダ
カスタム プロファイル プロバイダ
カスタム パーソナライゼーション プロバイダ
まとめ

はじめに

現在ますます多くのビジネス ソリューションが、Web ベースのアプリケーションで提供されています。 現状では、機能の追加やネットワーク接続の高速化など、インターネットのインフラストラクチャの強化により、増え続けるユーザーに対応しています。 インターネットにアクセスする目的もその際に使用するデバイスもユーザーによって異なるため、従来使用されている '匿名' の単一ユーザーの Web アーキテクチャでは不十分になっています。

より柔軟でユーザー指向の Web アプリケーションに対する新たな需要に対応するために、Microsoft ASP.NET 2.0 には、豊富なパーソナライゼーション フレームワークが用意されています。 ASP.NET 2.0 パーソナライゼーション機能には、ユーザーの識別および登録、特定のユーザーに応じた Web サイトのカスタマイズ、およびユーザー情報の透過的な自動保存に対する新たなメカニズムが含まれます。 Web パーツを使用することにより、ユーザーは、価値がある情報を選択してページに含めることができるようになります。 また、レイアウト コントロールおよび関連ツールにより、エクスペリエンスを合理化したサイトを作成できるようになります。 これらのカスタマイズは永続化が可能であるため、次にそのサイトを表示した際にも維持されます。

このホワイト ペーパーでは、Web パーツ認証コントロールおよびパーソナライゼーション プロバイダなどの新機能に関する技術的な概要を紹介します。 初級/中級開発者や ASP.NET 2.0 の新しいパーソナライゼーション機能に関心があるユーザーを対象に、コード例を紹介しながら機能について説明していきます。

パーソナライゼーション プロセス

Web サイトは従来、関心のあるユーザーに情報を伝えるために使用されてきました。 このようなサイトでは通常、概念や製品に関する情報が紹介され、関連情報を含む他のサイトへのリンクが提供されます。 現在の Web サイトは、ポータルまたは集中情報ポイントといった言葉が表すとおり、以前より幅広い目的で使用されています。 今日のこのような Web サイトでは、Web パーツやプロファイル サービスなどのパーソナライゼーション機能を利用して、関連する構成可能な Web エクスペリエンスがユーザーに提供されます。 会社の規模が大きくなり組織が複雑になるほど、管理可能な安全な方法で情報を配信することが重要になります。 パーソナライズされたエクスペリエンスを Web サイトで使用できるようにするには、Web アプリケーションで以下のようないくつかのタスクを個別に実行する必要があります。

  • ユーザーの識別?Web アプリケーションで、各ユーザーの要求をそれぞれ区別するメカニズムを準備する必要があります。 ユーザーを識別して特定のロールと関連付ける作業は、3 つの個別のプロセスに分かれています。 まず Web サイトでユーザーを識別する方法 (認証)、次に Web サイトでユーザーの要求を識別する方法 (セッション継続)、最後に Web サイトで新規ユーザーの ID を登録および管理するメカニズムが必要になります。
  • パーソナライズされたエクスペリエンスの提供?Web エクスペリエンスのパーソナライズでは、特定のユーザーに対して機能を有効または無効にしたり (認可)、ユーザーがカスタム表示できるように設定したり、ユーザー情報を継続して追跡するように設定したり (たとえばショッピング カートなど) することができます。 これらのタスクにより、ユーザーの ID ごとに異なる方法で処理を行うことで、各ユーザー固有の Web エクスペリエンスを提供します。
  • ユーザー情報の保存?多くの場合、Web アプリケーションでは、複数の要求またはセッションで共通して使用できるようにユーザー情報を保存しておく必要があります。 保存されるユーザー情報は、ユーザーの ID (ログインおよびパスワード) から、複雑な設定リストや履歴データ (たとえばアマゾンの "ウィッシュ リスト" など) にまで及びます。

パーソナライズされた Web アプリケーションを開発する上での課題の 1 つに、パーソナライゼーション プロセスのサポートに必要なフレームワーク コードの設計があります。 各機能を開発するだけではなく、すべての機能が安全かつシームレスに機能するように設計する必要があります。

ASP.NET 2.0 では、一連の新しいコントロールおよび技術を導入することにより、このような設計の問題に対する洗練されたソリューションを提供しています。既定の機能では適さない場合には、プロバイダ フレームワークを使用して、システムの他の機能とシームレスに動作するカスタム ソリューションを開発することも可能です。

ASP.NET 2.0 でのパーソナライゼーション

ASP.NET 2.0 では、パーソナライゼーション プロセスの各フェーズをサポートするために特別に設計された、統合されたコントロールと機能を提供することにより、パーソナライゼーション プロセスが大幅に簡略化および改善されています。 ASP.NET 2.0 でサポートされるパーソナライゼーション機能は、主にメンバシップ、プロファイル、および Web パーツの 3 つに分けられます。 このホワイト ペーパーでは、これらの 3 つについて詳細に説明します。

メンバシップ

ASP.NET 1.x では、外部のデータ ストアまたは web.config ファイルの設定に依存する認証および認可サービスが提供されていました。 たとえば、ASP.NET 1.1 アプリケーションでは、フォームベースの認証を利用することができました。この認証方法では、開発者がログイン フォームと関連するコントロールを作成し、ユーザー資格情報を取得、検証、管理する必要があります。 ユーザーは認証された後に、web.config ファイルの XML 設定を通して認可されていました。

ASP.NET 2.0 では、次の 3 つの方法でこのサービスが拡張されています。

  • ログインおよびユーザー コントロール?一連の新しいログインおよびユーザー管理コントロールを使用することにより、各アプリケーションに応じて書き直す必要がある標準ユーザー コードの量が少なくなります。 たとえば、適切なコントロールをページに配置していくつかのプロパティを設定するだけで、新規ユーザーの登録、既存ユーザーのログインの許可、およびパスワードを忘れてしまったユーザーへのパスワードの送信を実行するためのページのセットを作成することができます。
  • ユーザー管理?ASP.NET 2.0 の各アプリケーションには、特殊な管理ページのセットを通してアクセスできます。このページでは、たとえば認可されたユーザーが新規ユーザーを作成したり、ユーザーにロールを割り当てたり、ユーザー情報を保存したりすることが可能です。 独自の管理ツールを作成する場合には、これらのすべての機能にプログラムでアクセスすることもできます。
  • メンバシップ プロバイダ?メンバシップ機能は、フロントエンド機能 (ログイン コントロールおよびユーザー管理サイト) と永続化メカニズムの間のリンクを作成する機能です。 メンバシップ プロバイダにより、ユーザーとロールを保存および取得するために必要な、すべてのデータ アクセス コードがカプセル化されます。 このコンポーネントは、プロバイダ モデルを使用して、固有のデータ ソースをサポートするプロバイダに簡単に置き換えることができます。

これらの 3 つのコンポーネントを一緒に利用することにより、メンバシップ サービスを提供してそのメンバシップ サービスを永続的なデータ ストアにリンクするために必要なコードの量を減らすことができます。

プロファイル

ASP.NET 1.x アプリケーションでは、ユーザー固有のデータは多くの場合セッションに保存され、必要に応じてデータベースに反映されて永続化されていました。 このプロセスは、多くの場合非効率的で、さらに特殊なフレームワーク コードの開発も必要でした。

ASP.NET 2.0 では、新しいプロファイル サービスを提供することでこの問題を解決しています。 プロファイルは、各ユーザーに関連付けられたデータのセットです。 プロファイルには、基本的なデータ型 (stringint など) から複雑なオブジェクトまで、シリアル化可能であればどんなデータ型でも含めることができます。 ASP.NET 1.x とは異なり、プロファイルの管理は自動的に行われます。 ASP.NET 2.0 では、ユーザー プロファイルが自動的に作成および保存されます。

プロファイル サービスの中核となるのがプロファイル プロバイダです。 プロファイル プロバイダには、ユーザー データをデータ ストアに読み込んで永続化するために必要な、コードおよび構造がすべて含まれます。 メンバシップ プロバイダと同様に、プロファイル プロバイダも、選択したデータ ストアに適合するプロバイダと置き換えることができるように設計されています。

Web パーツ

Web パーツ フレームワークは、HTML フレームを使用するポータル ベースの Web サイトに代わる、非常に高度なフレームワークです。 通常、Web パーツは、マルチコンポーネント アプリケーションを作成するために使用します。Web パーツで作成したアプリケーションでは、表示するコンポーネント、コンポーネントの構成、およびページ上のコンポーネントの配置をユーザーが決定することができます。 認証されたユーザーが Web パーツを希望の設定に変更すると、自動的にそのレイアウトが他のセッションでも維持されます。 つまり、Web パーツにより、デスクトップのような外観と操作性を備えた Web アプリケーションが作成できるようになります。

Web パーツでは、複数のセッション間で維持する必要がある Web パーツ レイアウトを、パーソナライゼーション プロバイダを基に管理しています。 繰り返しますが、プロバイダは、.NET フレームワークの拡張可能部分として設計されています。 フレームワークの一部として利用可能なプロバイダを利用しない場合は、独自のプロバイダを簡単に作成することができます。

ユーザーの識別および管理

Web サイトのパーソナライゼーションにおける最初のステップは、ユーザーを識別および管理するメカニズムを確立することです。 Web サイトのユーザーの立場からすれば、パーソナライズされたコンテンツにアクセスするために、Web サイトから識別される方法が必要になります。 Web サイトの管理者の場合は、新規ユーザーの登録、特定ロールへのユーザーの割り当て、ユーザーの削除、パスワードを紛失したユーザーへの対応などを行うための方法を用意する必要があります。 ASP.NET 2.0 では、これらのすべての機能が大幅に簡略化されています。

ユーザーの識別

従来の Web アプリケーション システムでは、ユーザーを識別するために数多くのメカニズムが利用されてきました。 たとえば ASP.NET v1.0 では、Windows 認証からカスタム フォームに及ぶ 4 つの異なる認証メカニズムから 1 つを選択することができました。 ただし、認証メカニズムは選択できても、ユーザー ベースをサポートするために新規ユーザーの作成、ロールへのユーザーのリンク、ロールの評価などを Web サイトで行うには、独自のコードを作成する必要がありました。 Windows 認証や Active Directory などの技術によって解決できる問題もありましたが、それでも多くのコードを Web 開発者が記述する必要がありました。

ASP.NET 2.0 では 2 つの異なる方法で基本認証メカニズムが構築されています。 ASP.NET 2.0 では、第一に、ログインおよびユーザー管理 Web フォームを作成するための一連の新しいコントロールが導入されており、そして第二に、ユーザー アカウントを作成してユーザーを特定のロールに関連付けるための新しい API が用意されています。

次の表に、ユーザーの識別に関して使用できるコントロールを示します。

名前 説明
<asp:login> ユーザーが資格情報を入力する標準的なログイン機能です。
<asp:loginname> ログインしているユーザーの名前を表示します。
<asp:loginstatus> ユーザーが認証されているかどうかを示します。
<asp:loginview> 選択されたテンプレートに基づいてさまざまなログイン画面を表示します。
<asp:passwordrecovery> パスワードを紛失したユーザーに電子メールでパスワードを送信します。
<asp:CreateUserWizard> 宣言型の構成をしたユーザー作成ウィザードです。
<asp:ChangePassword> 宣言型の構成をしたパスワード変更ウィザードです。

<asp:login> コントロールを使用すると、ユーザーの資格情報を取得するための適切なラベル、テキスト フィールド、およびボタンが作成されます。 このコントロールのルック アンド フィールは、組み込みのフォーマットやスタイル シートを使用して変更することができます。 プロパティ ウィンドウを使用してラベル、値、および確認メッセージを変更できるほか、ログイン ボタンの外観も必要に応じて変更することができます。

<asp:passwordrecovery> コントロールを使用すると、パスワードを紛失したり忘れてしまった場合の対応方法として開発者が記述しなければならないコードの量が少なくなります。 このコントロールでは、web.config ファイルを通して構成された SMTP を使用して、ユーザーのパスワードを記述した電子メール メッセージを、指定されたアカウントに事前に関連付けられた電子メール アドレスに送信します。

ユーザー管理

ユーザー管理プロセスを簡略化するために、ASP.NET 2.0 には組み込みの Web サイト構成ツールが備えられています。 Web サイト管理ツールは、安全な接続を通してローカルホストから直接アクセスできる単純な Web サイトです。 このツールを使用することにより、管理者は、ユーザー管理、パーソナライゼーション プロバイダ、セキュリティ、プロファイルなどのサービスを構成して、アプリケーションを管理することができます。 Web サイト構成ツールには、パーソナライゼーション、メンバシップ、プロバイダなどの複数の ASP.NET 2.0 技術に対応した、グラフィカルなフロントエンドが用意されています。

メンバシップ API によりユーザー管理機能が公開され、一方で Profile オブジェクトによりユーザー設定の詳細が処理されます。 メンバシップ API は、プログラムからアクセスすることも、ユーザー コントロールを通してアクセスすることもできます。 カスタムのユーザー管理インターフェイスが必要な場合、ユーザー設定の詳細を取得して維持するには、Membership オブジェクトおよび MembershipUser オブジェクトを使用します。 多くの場合、ログイン コントロールにより、認証に使用できる非常に堅牢で構成可能なメカニズムが提供されます。

パーソナライゼーション プロバイダ

パーソナライゼーション プロバイダによって、パーソナライゼーション データを使用する Web パーツ機能とユーザー情報を格納するデータ ストアの間にリンクが作成されます。 Web サイト管理ツールを通して、パーソナライゼーション プロバイダを構成し、SQL Server または Access データベースに接続することができます。

ASP.NET 2.0 管理ツールおよび SQL Server パーソナライゼーション プロバイダで使用するスキーマを図 1 に示します。

拡大するにはここをクリックしてください。
図 1. 生成されるデータ モデル

このスキーマは、パーソナライズされた Web サイトでのユーザー管理に使用するメンバシップ データを保存するためのデータ モデルを示しています。 実際のスキーマはプロバイダによって異なるため注意してください。

ASP.NET 2.0 には SQL Server 対応プロバイダと Microsoft Access 対応プロバイダが標準で実装されますが、プロバイダ フレームワークは拡張できるように設計されています。 別のデータベースや XML ファイルに対応するプロバイダも、新しい provider クラスを作成し、管理ツールを使用して登録するだけで作成できます。

ユーザー アカウントの管理

provider を構成し、データ ストアを作成したら、次のステップはデータ ストアへのユーザー情報の入力です。 Web サイト管理ツールには、管理者が新規ユーザーを作成し、そのユーザーに電子メール メッセージでパスワードを送信するための簡単なユーザー作成フォームが用意されています。

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

この Web フォームは少人数のユーザーを作成する際には便利ですが、多くの Web サイトでは数百または数千の登録ユーザーをサポートしています。 さいわい、Web サイト管理ツールは管理 API であるうえ、単純な Web ベースのシェルであるため、 ASP.NET 2.0 の適切なクラスを利用するだけで、バッチ ユーザー アップロード プロセスを作成したり自己登録フォームを作成することができます。

プログラムによるユーザー作成

メンバシップ API には、すべてのユーザー管理機能がカプセル化されているため、多数のクラスからアクセスすることができます。 最も重要な 2 つのメンバシップ クラスは MembershipMembershipUser です。

System.Web.Security.Membership クラスでは、ユーザーの登録、削除、更新および検索を実行するためのメソッドが使用できます。 アプリケーション内でユーザー アカウント フォームを作成するには、単に Membership クラスから CreateUser() メソッドを呼び出します。

try {
    MembershipUser newUser = Membership.CreateUser("Seth", "trader");
} catch (MembershipCreateUserException mcue) {
    string error = mcue.Message;
}

この例では、CreateUser メソッドにより、基になるメンバシップ プロバイダを使用して新規ユーザーの永続化が試行されます。 エラーが発生した場合は、CreateUser() メソッドにより、問題を示す MembershipCreateUserException がスローされます。 例外の Message プロパティまたは StatusCode プロパティを問い合わせることにより、エラーの正確な内容を確認することができます。

エラーをより機能的に処理するには、MembershipCreateStatus 列挙値を受け取る、オーバーロードされた CreateUser を使用します。これにより、さまざまな種類のエラー状態を示すエラー コードを取得できます。

MembershipCreateStatus status;
MembershipUser newUser = Membership.CreateUser(
    "Seth", "trader", "seth@boilerroom.com", 
    "last name?", "Davis", true, out status);
if (status == MembershipCreateStatus.Success) {
    Server.Transfer("WebParts.aspx");
} else {
   //ユーザー作成に失敗した場合に、エラーの種類を特定します
    string errorcode;
    switch (status) {
     case MembershipCreateStatus.DuplicateUserName:
       errorcode = "Username already exists.";
       //エラー状態を解決し、再試行します
       break;
     case MembershipCreateStatus.DuplicateEmail:
       // コードを簡潔にするために他の 8 つの状態については省略します

MembershipCreateStatus 列挙値は、出力パラメータとして CreateUser メソッドに渡されます。 メソッドが完了した後、status オブジェクトのエラー コードを問い合わせて、結果を MembershipCreateStatus で事前に定義されているエラー タイプと比較することができます。

ユーザーが正常に作成されると、ユーザーの詳細が System.Web.Security.MembershipUser クラスでカプセル化されます。 MembershipUser クラスを使用すると、最後にアクティビティが行われた日付の確認、パスワードまたはセキュリティ保護のための質問の変更、ユーザーについてのコメントの変更、ユーザー アカウントの承認または無効化などを実行できます。

プログラムによるロール割り当て

作成したユーザーは、System.Web.Security.Roles オブジェクトを通してロールに追加できます。 Role の割り当ては、ユーザー名をロール名とリンクさせるだけで簡単に実行できます。

Roles.AddUserToRole("Seth", "Administrator");

ASP.NET のユーザーおよびロールは、Windows のユーザーおよびロールにリンクされている必要はありません。

再ログインの場合のログイン コントロール

MembershipMembershipUser および Roles クラスに含まれる機能のほとんどは、ログイン コントロールにカプセル化されています。 そのため、ログイン コントロールを使用すると、ユーザー管理を開発するためのコードが少なくなり、時間の節約にもなります。 たとえば、Login コントロールと新しいページ間ポスティング機能を使用することにより、ユーザー情報を収集および検証し、さらにログイン コントロールおよびメンバシップ プロバイダを利用して新規ユーザーを自動的に作成する、複数のステップから成るユーザー登録プロセスを作成できます。

カスタム ユーザー エクスペリエンスの作成

従来のほとんどの Web アプリケーションでは、単純なテキスト以外のユーザー情報を追跡、保存、および使用することは複雑であるため、カスタマイズされたユーザー エクスペリエンスはあまり提供されませんでした。 それに対し ASP.NET 2.0 では、特定のコンテンツを表示したり、ユーザー情報を保存したり、ユーザー設定に応じて表示を変更したりするためのユーザー インターフェイスを、すばやくかつ簡単に作成することができます。

プロファイル

プロファイルは、特定のユーザーに関する情報を保管可能なバケットとして作成するための構成可能なメカニズムです。 ユーザーの名前から複雑なデータ オブジェクトまで、さまざまなデータを保存するために使用できます。 基本的には、ユーザー情報を収集してセッション (またはクッキーやデータベース) に対して永続化し、情報をユーザー セッション間で維持するために必要な、永続的なコードに代わるものです。

Profile オブジェクトは、web.config ファイルに XML 要素として保存されている、XML スキーマを使用して構成されます。 適切な形式で作成したプロファイル構成は、web.config ファイルに保存するだけですぐに IDE およびランタイムで利用することができます。 プロファイルは、アプリケーションでの必要に応じて、簡潔になることも複雑になることもあります。

プロファイルの定義

プロファイルは、web.config ファイルにある専用の XML タグのセットに従って定義されます。 プロファイル内の各要素は、最低限名前と、通常はデータ型が指定されている必要があります。 型属性が含まれていない場合は、既定の型である string が使用されます。 プロファイルには、プリミティブ型からユーザー定義オブジェクトまで、すべての型を格納することができます。 name 型と data 型は、Intellisense を提供して実行時チェックをするために Visual Studio 2005 により使用されます。

<profile>
   <property name="NumberOfApples" type="int" />
</profile>

作成したプロパティは、名前 NumberOfApples により参照される、整数型の値になります。

プロパティには追加の属性も定義できます。特に、プロファイル要素の保存方法や匿名ユーザーよる要素の使用の有無について定義されます。

<profile>
   <property 
      name="EmailAddresses"    
      type="System.Collection.Specialized.StringCollection" 
      serializeAs="Xml" 
      allowAnonymous="false" 
      provider="SQL"/>
    <property name="NumberOfApples" type="int" defaultValue="3" />
</profile>

このプロファイルにより、EmailAddress プロパティが定義され、プロパティで多くのパラメータが使用できるようになります。 プロパティに対して適用可能なすべての属性 (ほとんどが省略可能) のリストを、次の表に示します。

属性名 省略可/必須 値の例 説明
name 必須 文字列 このプロパティに対する一意の ID。
type 省略可 プリミティブ | ユーザー定義型 .NET のプリミティブ型またはクラス。 クラス名は完全に限定されている必要があります (Myapp.UserData.ColorPrefs など)。
serializeAs 省略可 文字列 | Xml | バイナリ データストアで永続化する際の値の形式。
allowAnonymous 省略可 true | false この値に対する匿名アクセスを制限または許可します。 false に設定すると、匿名ユーザーにはこのプロファイルの値へのアクセス権が与えられません。
provider 省略可 文字列 この値の管理に使用するプロバイダ。 web.config または machine.config の defaultProvider 設定をオーバーライドします。
defaultValue 省略可 文字列 プロパティが明示的に設定されていない場合に返される値。
readOnly 省略可 true | false 書き込みアクセスを制限します。

provider 属性は、異なるプロバイダを通してプロファイルの異なる部分が格納される場合に重要な役割を果たします。 たとえば、プライベート ユーザー データはデータベース プロバイダを通して格納し、それより重要性が低い (または簡単に再構築できる) データは XML ファイルに格納するような場合があります。 このようなシナリオにも、特定のプロバイダを割り当てることにより簡単に対応できます。

プロパティのグループ化

多くの場合、プロファイルは、ビジネス上の関連事項を伝えるためにグループ化された複数のプロパティにより構成されます。 たとえば、関連するプロパティによって、ユーザー設定を表すグループや、請求情報を表すグループなどがあります。 ASP.NET 2.0 では、<group> タグを使用して、プロパティをグループ化することができます。

<profile>
  <properties>
   <group name="Preferences">
    <add name="ShowQuoteOfTheDay" 
     defaultValue="true" type="System.Boolean" />
    <add name="ShowNews" type="System.Boolean" />
   </group>
   <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>
  </properties>
 </profile>

各グループおよびグループ内の要素には一意の名前が割り当てられていてる必要があります。 ただし、要素はグループごとに区別されるため、グループが異なれば別の要素に同じ名前を使用することができます。

コードによるプロファイル プロパティへのアクセス

web.config ファイルでプロファイルを定義すると、Profile オブジェクトを通してさまざまなプロファイル要素にアクセスできるようになります。 このオブジェクトは、実際は、ページのコンパイル時に作成される System.Web.Profile.HttpProfileBase の特殊なサブクラスです。 Profile サブクラスには、すべてのプロパティが厳密に型指定されたアクセス メソッドおよびプロファイルで定義されたグループが自動的に含まれます。 そのため、Profile オブジェクトは、各 Web アプリケーションのカスタム クラスになります。 ただし、開発者の視点では、Profile クラスの作成は自動的かつ透過的に実行されます。

Profile オブジェクトにより、現在のユーザーのプロファイル内にあるプロパティへの読み込みおよび書き込みアクセスが提供されます。 プロパティがグループ内に含まれている場合、グループはサブ プロパティを持つ追加のプロパティのように機能します。 開発者は単に Profile オブジェクトに対してプログラムするだけでよく、Profile の読み込みおよび保存は ASP.NET で自動的に実行されます。

Dd278203.personalization_fig03(ja-jp,MSDN.10).gif
図 3. Intellisense サポートによる厳密に型指定された web.config プロパティ

Visual Studio 2005 では、web.config ファイルに対する変更は直ちに反映されます。 web.config ファイルを保存すると、すぐに Intellisense を通してプロパティにアクセスできるようになります。 つまり、開発中にプロファイルを変更する必要がある場合、Visual Studio 2005 では、即座に変更が認識され、ツールによる適切なサポートが提供されます。

Web パーツ

Web パーツは、必要なものだけを使用して生産性の高いインターフェイスを作成するために、ユーザーが自由に取り入れて配置することができるモジュール コンポーネントです。WebPartManager と一緒に使用したり、WebPartZones 内に含めて使用することができます。 ユーザーは以下を実行することができます。

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

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

Web パーツのアーキテクチャ

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

Web パーツ フレームワークの主要なコンポーネントは次のとおりです。

  • System.Web.UI.WebControls.WebParts.WebPart クラス?WebPart は、Web パーツ ゾーンのメンバに含めるサブクラスを定義する構成プロパティの概要を示す基本クラスです。 通常、1 つ以上のコントロールが WebPart のサブクラスでカプセル化されるか、GenericWebPart が単一のユーザー コントロールでラップされます。
  • System.Web.UI.WebControls.WebParts.WebPartZone コントロール?WebPartZone コントロールは、Web パーツのコレクションでのラッパーです。 WebPartZone により、Web パーツのインフラストラクチャが提供されます。このコントロールは、ゾーンが占める画面領域のルック アンド フィールを定義するためにも使用されます。
  • System.Web.UI.WebControls.WebParts.WebPartManager コントロール?WebPartManager は、Web パーツを使用する各ページに 1 つずつリンクされます。 WebPartManager により、ページ上のすべての Web パーツの状態が構成され、維持されます。

これらの 3 つのコントロールを組み合わせて使用することにより、視覚的にも機能的にも複雑なデスクトップ アプリケーションによく似た Web ページを作成することができます。

Web パーツの作成

Web パーツを作成する方法は 3 つあります。 1 つ目の方法として、通常のユーザー コントロールを WebPartZone にドロップすることができます。 ドロップされたユーザー コントロールは、自動的に GenericWebPart ラッパーでカプセル化されます。 この Web パーツ作成方法は、パーソナライゼーションをユーザー コントロールに拡張するための最も簡単な方法です。

2 つ目の方法として、WebPart クラスを拡張するコントロールを作成することができます。 Web パーツの動作を変更する場合や、Web パーツの機能およびプロパティをより詳細に管理する必要がある場合は、この方法で作成してください。 ただし、この方法では、サーバー コントロールを開発する必要があるため、GenericWebPart を使用した場合よりも複雑なコードの記述と開発作業が必要になります。 基本的な WebPart クラスを拡張すると、多くの場合、インターフェイスを実装した場合よりも便利です。これは、処理動詞およびユーザー操作のコードが WebPartManager での作業から自動的に継承されるためです。 クラスを継承すると、RenderContents() メソッドをオーバーロードするだけで Web パーツ固有のコンテンツが生成されます。

3 つ目の方法は、IWebPart および IWebActionable インターフェイスを実装する方法です。 IWebPart インターフェイスにより、WebPart の動作に関するいくつかのメソッドが定義されます。 最も重要なメソッドは、Web パーツへの出力を生成するための RenderContents() です。 一方、IWebActionable インターフェイスでは、動詞とユーザー操作に対する Web パーツでの対応方法が定義されます。

単純な Web パーツ

Web パーツを作成する最も簡単な方法は、任意のユーザー コントロールを既存の WebPartZone にドラッグすることです。Web パーツをすばやく開発できるこの方法は、静的なコンテンツの開発に非常に適しています。 作成は簡単ですが、この Web パーツ作成方法にはいくつかの制限があります。 まず、WebPartZone に追加された各コントロールには、それぞれ独自の GenericWebPart ラッパーが割り当てられます。 そのため、複数のコントロールを追加すると、結果として多数の Web パーツを作成することになります。 また、高度な Web パーツ機能を制御する Web パーツ プロパティは、汎用的な Web パーツでは利用できません。 GenericWebPart を使用する場合の最もよい方法は、単一のカスタム ユーザー コントロールを作成して、それよりも小さなコントロールとコンテンツをすべてそのコントロールに含めることです。 これにより、作成したカスタム コントロールを WebPartZone にドラッグ アンド ドロップすることで単一の Web パーツを作成できます。

GenericWebPart ラッパーを参照することはありません。 GenericWebPart ラッパーは、実行時に、Web パーツ フレームワークにより自動的にコントロール ツリーに挿入されます。 つまり、ユーザー コントロールをラップするこのラッパー クラスの作成は、ASP.NET 2.0 コンパイラにより自動的にバックグラウンドで実行されます。

派生 Web パーツ

Web パーツの全機能を公開するために、WebPart クラスを拡張してカスタム Web パーツを作成することができます。 カスタム Web パーツの作成に含まれるこのステップは、カスタム ユーザーまたはサーバー コントロールの作成で必要になるステップとほぼ同様です。 まず、WebPart クラスを拡張するオブジェクトを作成します。

using System;
using System.Text;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI;
namespace PartsLibrary {
    public class announcementControl : WebPart {
        public announcementControl() {}
        protected override void 
            RenderContents(HtmlTextWriter writer) {
            writer.Write(
        "Dr. William K Chin discovers new treatment for Ranaud's!");
        }
    }
}

このコードにより WebPart のサブクラスが作成され、メッセージを出力する RenderContents() メソッドがオーバーライドされます。 簡潔にするために、ここでは比較的単純な例で説明しています。 実際には、announcementControl で、複雑なビジネス ロジックをカプセル化することもできます。 このクラスは PartsLibrary 名前空間で定義され、アセンブリにコンパイルされます。

次に、announcementControl Web パーツを使用する Web プロジェクトにアセンブリへの参照を追加します。 これにより、Web パーツを単にツールボックスからドラッグ アンド ドロップするだけで、または ASPX ページにコードを直接追加することにより、Web パーツをアプリケーションのページに追加できるようになります。 annoucementControl を登録してインスタンス化するためのソース コードを次に示します。

<%@ Register TagPrefix="jc1" Namespace="ClassLibrary1" Assembly="ClassLibrary1" %>
A?A…
   <asp:WebPartZone ID="BottomZone" 
    Runat="server" Height="45px" Width="760px">
      <PartTitleStyle Font-Bold="True" 
       BackColor="Black" ForeColor="DarkKhaki">
      </PartTitleStyle>
         <RestoreVerb ImageUrl="~/images/RestoreVerb.GIF">
         </RestoreVerb>
         <HeaderStyle BackColor="Black" 
          ForeColor="DarkKhaki"></HeaderStyle>
         <MinimizeVerb ImageUrl="~/images/MinimizeVerb.GIF">
         </MinimizeVerb>
         <ZoneTemplate>
            <jc1:announcementControl 
             Runat="server" ID="AnnouncementControl1"
               ForeColor="#C00000" 
               BackColor="Silver" Title="Announcements"
               AllowHide="False" AllowMinimize="False" 
               AllowClose="False" />
         </ZoneTemplate>
   </asp:WebPartZone>

登録ディレクティブにより、jc1 プレフィックスがカスタム Web パーツと関連付けられるため、アセンブリにあるすべてのコントロール (announcementControl) がこのページで使用できるようになります。 カスタム Web パーツ jc1:announcementControl は完全に構成可能であるため、AllowHideAllowMinimize など、構成に関する Web パーツ プロパティが公開されます。 単純な Web パーツ作成方法では、これらのオプションは利用できません。

Dd278203.personalization_fig04(ja-jp,MSDN.10).gif
図 4. 動詞コントロールを使用した Web パーツ

図 4 の Announcements Web パーツによって使用可能になる標準動詞はありません。 上記のコードでは、これらのプロパティが明示的に無効にされています。 特定の Web パーツ機能を無効にすることにより、必要なページ要素がユーザーにより誤って削除されないようにすることができます。

この方法で Web パーツを作成すると、ユーザー設定の詳細を複数のサイトを表示した後も維持するための、より多くの機能 (パーソナライゼーション プロバイダとの連携など) が公開されます。

インターフェイスの実装

Web パーツ作成の最後のオプションは、IWebPart および IWebActionable インターフェイスの実装です。 インターフェイスを直接実装することにより、開発者は Web パーツ フレームワークの基本的な動作を変更することができます。 この方法は、Web パーツのあらゆる動作を直接制御する場合にのみ使用してください。 通常は、Web パーツのすべての機能を書き換えるのではなく、単に WebPart クラスの拡張のみを実行します。

Web パーツ ゾーン

Web パーツ ゾーンは、Web パーツのコレクションを含むスペースの領域です。 Web パーツ ゾーンは、ゾーンのスコープ内にあるコンポーネントのルック アンド フィールを変更するためのプロパティを定義するコンテナです。

各 Web パーツ ゾーンには、タスクを完了するために必要なユーザー インターフェイス要素とコントロールが含まれます。 また、すべての Web パーツ ゾーンに、相互に排他的な機能が含まれています。 各 Web パーツ ゾーンに含まれる機能を相互に独立させることにより、開発者は、複雑なユーザー インターフェイス管理に関する問題に対するユーザーの負担を軽減することができます。

Web パーツ ゾーンは、.aspx ページ内で、<asp:WebPartZone> コントロール タグを使用して定義されます。 Announcements Web パーツを含む典型的な Web パーツ ゾーン定義を次のコードに示します。 このコードは完全な .aspx ページではない点に注意してください。

<asp:WebPartZone ID="BottomZone" Runat="server" 
      Height="45px" Width="760px">
      <PartTitleStyle Font-Bold="True" 
        BackColor="Black" ForeColor="DarkKhaki">
      </PartTitleStyle>
         <RestoreVerb ImageUrl="~/images/RestoreVerb.GIF">
         </RestoreVerb>
         <HeaderStyle BackColor="Black" ForeColor="DarkKhaki">
         </HeaderStyle>
         <MinimizeVerb ImageUrl="~/images/MinimizeVerb.GIF">
         </MinimizeVerb>
         <ZoneTemplate>
            <jc1:announcementControl Runat="server" 
             ID="AnnouncementControl1"
               ForeColor="#C00000" BackColor="Silver" 
               Title="Announcements"
               AllowHide="False" AllowMinimize="False" 
               AllowClose="False" />
         </ZoneTemplate>
    </asp:WebPartZone>

Web パーツ ゾーンは、一意の ID 属性を使用して構成する必要があります。この属性は、ページ内の特定のゾーンを識別するために、Web パーツ マネージャ コントロールにより使用されます。 ページ レイアウトの編集時に Web パーツ ゾーンのヘッダーとしてタイトルが表示されます。

Web パーツ動詞

Web パーツ動詞は、ユーザーが特定の Web パーツ関連操作を実行するためのユーザー インターフェイス要素です。 多くのデスクトップ Windows アプリケーションの標準的なコマンドやアイコンと同等のものと見なすことができます。 これらの動詞は、標準動詞である CloseMinimizeRestoreHelpEditConnect、および Export を提供する WebPartZone により定義されます。

各動詞は、Web パーツ ゾーンの内部で XML 要素として構成することができます。

<asp:WebPartZone id="Zone1"  runat="Server">
  CloseVerb ImageUrl="images/CloseVerb.jpg"
            Enabled="True"
            Text="Close"
            Description="Closes the WebPart"
            visible="True" />
  <ZoneTemplate>
     <custom:QuoteWebPart title="Quotations" 
      id="QuoteWebPart" runat="Server" />
  </ZoneTemplate>
</asp:WebPartZone>

一般的な動詞には、その状態を説明する多くのパラメータと視覚的な構成が含まれます。 たとえば、imageUrl 属性を使用してイメージを動詞に関連付けることができます。 通常、イメージは、対象操作を表す小さなアイコンの形をしています。

動詞は、WebPartZone タイトル バーの右上の隅に表示されます。 既定では動詞は単純なテキストとして表示されますが、 アイコンを割り当てることによって動詞のカスタム表示を作成することもできます。

Dd278203.personalization_fig05(ja-jp,MSDN.10).gif
図 5. Web パーツ動詞

動詞には、対象タスクをテキストで説明するためのツール ヒントを関連付けることもできます。 これにより、動詞をアイコンの形式で Web パーツに追加しても共通の機能を表すことができ、使用する画面領域の量を削減することができます。

テンプレート

ASP.NET 2.0 全体で共通のユーザー コントロール要素を、テンプレートを使用して構成することができます。 また、Web パーツ コンポーネントでは、ページ上の Web パーツのルック アンド フィールを構成する場合にもテンプレートを使用します。 Web パーツを WebPartZone に追加するには、<ZoneTemplate> タグ内に配置します。 ZoneTemplate では、その構成要素である Web パーツの既定のレイアウトが定義されます。

<ZoneTemplate>
  <custom:DrugWebPart Title="Drugs" bgcolor="#333333" 
   id="DrugWebPart1" runat="server" /> 
  <custom:ScheduleWebPart Title="Schedules" 
   id="QuoteWebPart2" runat="server" />         
  <custom:EventsWebPart Title="Daily Events" 
   id="QuoteWebPart3" runat="server" />
</ZoneTemplate>

同じテンプレート内に格納されたパーツでは、すべて共通のルック アンド フィールが使用されます。 CatalogZone および EditorZone でも、ZoneTemplate が定義されます。これらのゾーンに対する ZoneTemplate で、標準の Web パーツ ゾーンとは異なるルック アンド フィールを使用することもできます。 たとえば、ユーザーがカタログ モードに入ったらルック アンド フィールを変更して、カタログ ゾーンを強調することができます。 開発者は、テンプレート コントロールを使用することにより、Web パーツのルック アンド フィールを宣言によって定義することができます。 テンプレートにより、コントロールに対する UI の整合性が高くなり、結果として対話型コンポーネントでのユーザー エクスペリエンスが改善されます。

Web パーツ マネージャ

Web パーツを使用するページには、Web パーツ マネージャを 1 つだけ追加する必要があります。 マネージャ コントロールは、ページ上の Web パーツの状態を記録する機能で、Web パーツ ゾーンより前に追加する必要があります。

Web パーツ マネージャ コントロールの DisplayMode プロパティは、エンド ユーザーが利用できる構成オプションの種類を定義するプロパティであるため特に重要です。 DisplayMode に指定できる値は次のとおりです。

  • Catalog?Web パーツのリストを表示し、パーツの再配置を許可します。
  • Design?ユーザーによるページ上の Web パーツの再配置を許可します。
  • Edit?ユーザーによる個別の Web パーツの特定属性の編集を許可します。
  • Connect?2 つの Web パーツ間の通信を提供します。
  • Browse (既定)?ユーザー設定を適用してページが表示されます。

異なるモードを使用して、開発者は目的の機能をユーザーに対して公開することができます。 たとえば、図 6 に示すカタログ モードにより、ユーザーは表示する Web パーツを選択することができます。 カタログ モードでは、WebPartManager のカタログ ゾーンがユーザーに対して表示されるようになります。 Web パーツは選択してから、[追加] ボタンを使用してページのゾーンの 1 つに追加することができます。 これが Web パーツをページに追加するための唯一のモードです。

Dd278203.personalization_fig06(ja-jp,MSDN.10).gif
図 6. カタログ モード?Web パーツ

一般的なカタログには、固有の情報を表示したり、ユーザーによる特定機能へのアクセスを可能にするための、複数の異なる Web パーツが含まれます。 たとえば、図 6 のカタログは病院の Web ポータルの一部です。 医者、看護婦、および管理者はすべてこのポータルを使用して、スケジュール、日常業務、お知らせ、および患者の状態に関する情報にアクセスします。 このポータルには患者情報が含まれるため、セキュリティが重要になります。 そのため、このポータルでは、各ユーザーを識別するメンバシップ サービスを利用して、表示する情報を決定しています。

ユーザーはゾーンに追加するパーツを選択したら、[閉じる] ボタンをクリックしてブラウズ モードに戻り、レイアウトの結果を確認することができます。

拡大するにはここをクリックしてください。
図 7. ブラウズ モード?Web パーツ

たとえば、図 7 は Dr Jayesh Patel の Web パーツ レイアウトを示しています。 Dr Patel は、現在の患者のリスト (左上)、薬の検索 (左下)、および請求情報 (右) の Web パーツを表示するように選択しています。

Web パーツは、ASP.NET の組み込みのドラッグ アンド ドロップ機能を使用して、別の Web パーツ ゾーンに移動することができます。 たとえば、Dr Patel がページの右側で患者のリストと請求情報をグループ化する例を次に示します。

拡大するにはここをクリックしてください。
図 8. ドラッグ アンド ドロップ?Web

図 8 は、Web パーツを leftzone から mainzone にドラッグする例を示しています。 利用可能な Web パーツは、どの Web パーツ ゾーンにでも配置することができます。 パーツがユーザーにより再配置されると、ページの状態はセカンダリ ストレージに反映されて永続化されます。 この Web サイトを次に表示した際には、ユーザーの Web パーツ レイアウトが再び呼び出されます。

パーソナライゼーション プロバイダ

Web パーツのレイアウトおよび構成は、パーソナライゼーション プロバイダにより保存されます。 このプロバイダは、メンバシップ プロバイダやプロファイル プロバイダに似たプロバイダで、ユーザー情報の永続化を透過的に管理します。 ただし、パーソナライゼーション プロバイダは、各ユーザーの Web パーツ構成の保存に特化したプロバイダです。

プロバイダによるユーザー データの保存

プロバイダ モデルは、フレームワークを拡張および強化するメカニズムとして ASP.NET 2.0 全体で使用されます。 このため、プロバイダは、開発者が ASP.NET 2.0 フレームワークを特定の要求に合わせるために拡張できる、パターンでありポイントでもあります。 たとえば、開発者は新規プロバイダを作成して、ユーザー識別システムをサポートしたり、パーソナライゼーション データを代替データ ストアに保存したりすることができます。

ほとんどのカスタム プロバイダは、データベース バックエンド システムと対話します。 ただし、プログラマは、モデルに要求されるインターフェイス仕様に適応する限り、任意のメディアやアルゴリズムを使用して必要なプロバイダ メソッドおよびクラスを自由に実装することができます。

プロバイダ モデル

プロバイダ モデルは、多数の広く受け入れられているパターンから派生します。 このモデルにより、特定の要求を保存および取得するデータ永続化層に対するクラスのセットおよびフックが定義されます。 この方法では、プロバイダ モデルが、ASP.NET 2.0 でクライアント固有の問題に対応するためのプログラミング仕様として動作します。

パーソナライゼーションに関して、ASP.NET 2.0 では 3 つの異なるプロバイダを使用します。

  • Membership?メンバシップ プロバイダでは、ユーザー認証およびユーザー管理がサポートされます。
  • Profile?プロファイル プロバイダでは、プロファイルにリンクされたユーザー固有のデータの保存および取得がサポートされます。
  • Personalization?パーソナライゼーション プロバイダでは、各ユーザーの Web パーツの構成およびレイアウトの永続化がサポートされます。

それぞれの種類のプロバイダは、他のプロバイダから独立して機能します。 そのため、profile プロバイダを置き換えても、membership プロバイダで問題が発生することはありません。

既存のプロバイダの選択

ASP.NET 2.0 には、プロバイダの種類ごとに 2 つの既定プロバイダが付属されています。 1 つは SQL サーバーに接続するプロバイダで、もう 1 つは Microsoft Access に接続するプロバイダです。 前述のとおり、データ ストアを共有している場合でも、各プロバイダは完全に独立しています。

したがって、プロバイダを選択する際には、データ ストアの機能が目的に合っているかを確認する必要があります。 たとえば、AccessPersonalizationProvider は、Microsoft Access に接続するプロバイダで、パーソナライゼーション データが単純な、比較的小さいサイトを対象とします。 Microsoft Access と Microsoft SQL サーバーでは要件が異なるため、AccessPersonalizationProvider を使用した場合、配置が大幅に簡略化されます。 これに対し、SqlPersonalizationProvider はより柔軟に構成可能なプロバイダで、Access データベースのスケーラビリティが問題となるような場合に使用できます。

その他の種類のプロバイダに対しても、同様の分析を行うことができます。 Access と SQL サーバーのどちらを使用してもデータ ストレージの要件が満たされない場合は、管理 Web サイトを使用して独自のプロバイダを作成し、フレームワークに組み込むことができます。

カスタム プロバイダの開発

新規プロバイダの作成は、プロバイダの機能上の要件を満たす新規クラスを実装する場合と同様に簡単です。 開発したクラスは Web サイト メンテナンス ツールを使用して登録することができるため、クラスを適正な種類のプロバイダとして有効にすることができます。

カスタム プロバイダ ソリューションは、パーソナライゼーション データが既に存在する場合や、既定のプロバイダを使用して管理するには複雑になりすぎている場合に作成します。 LDAP ディレクトリにあるユーザー データやバックエンドの人事リポジトリにある個人情報など、複数のデータソースのパーソナライゼーション データがアプリケーションで必要な場合は、カスタム プロバイダを使用すると同質のデータ システム間のインターフェイスが提供されます。

カスタム メンバシップ プロバイダ

カスタム メンバシップ プロバイダを作成する手順は次のとおりです。

  1. System.Web.Security.MembershipProvider から派生する新規クラスを作成します。

  2. Web 構成ツールを使用してプロバイダを登録します。 プロバイダを手動で追加するには、新規の <connectionStrings> 要素と <membership> 要素を追加します。

    <configuration>    
      <connectionStrings>
        <add name="MembershipProviderConnection" 
         connectionString="DATA\mydb.mdb" />
      </connectionStrings>
      <system.web>
        <membership defaultProvider="FlatFileProvider">
          <providers>
            <add connectionStringName="MembershipProviderConnection"
                 applicationName="/DoctorPortal"
                 description="Flat file membership provider"
                 requiresUniqueEmail="true"
                 enablePasswordRetrieval="false"
                 enablePasswordReset="true"
                 requiresQuestionAndAnswer="false"
                 passwordFormat="Hashed"
                 name="catdog"
                 type="MyCode.Membership.FlatFileProvider, 
                       MyCode.Membership,
                   Version=1.1.1300.0, Culture=neutral, 
                   PublicKeyToken=xxxxxxxxxxxxxxxx" />
                </providers>
            </membership>
    
    //別の構成が記述される部分
        </system.web>
    

    どの方法でプロバイダを登録した場合も、自動パスワード取得や実際のパスワード方式などの、さまざまなメンバシップ機能をプロバイダでサポートするかどうかを宣言することができます。

  3. アプリケーションでのデータストア (データベースまたはその他のデータ ソース) の使用を有効にします。

メンバシップ プロバイダを登録すると、独自のデータ ストアを使用してユーザーとロールの編成および保守を実行できるようになります。

カスタム プロファイル プロバイダ

カスタム プロファイル プロバイダの開発でも同様のプロセスが必要になりますが、実装クラスについては System.Web.Profile.ProfileProvider クラスから派生している必要があります。 ProfileProvider クラスは、System.Configuration.Provider.ProviderBase から継承される System.Configuration.SettingsProvider から派生します。 結果として、カスタム プロファイル プロバイダには、ProfileProviderSettingsProvider および ProviderBase により要求されるすべてのメソッドが実装されることになります。

web.config ファイルに新しいエントリを追加することにより、カスタム プロバイダを使用するようにパーソナライゼーション フレームワークを構成できます。

<profile defaultProvider="OdbcProvider">
   <providers>
      <add name="OdbcProvider" 
       type="Samples.AspNet.Profile.OdbcProfileProvider"
                 connectionStringName="OdbcProfile" />
   </providers>
</profile>

上記のコードは、web.config ファイルのプロファイル セクションを示しています。 OdbcProvider という名前のカスタム プロファイル プロバイダがプロバイダ リストに追加されます。 プロファイル タグでは、defaultProvider 属性に OdbcProvider が設定されています。 上記の構成を、ProfileProvider クラスを実装する有効なコードに追加するだけで、カスタム プロバイダの実装は終了です。

カスタム パーソナライゼーション プロバイダ

カスタム パーソナライゼーション プロバイダの作成でも同様の基本プロセスを実行しますが、パーソナライゼーション プロバイダは System.Web.UI.WebControls.WebParts.PersonalizationProvider から派生している必要があります。 作成したプロバイダは、Web 構成ツールを使用して自動登録するか、<personalization> タグの <providers> セクション (web.config ファイルの <webParts> 要素内に入れ子になっています) にエントリを追加して手動で登録することができます。

他のカスタム プロバイダの場合と同様に、有効なデータ ソースを作成してアプリケーションで利用できるようにしておく必要があります。 パーソナライゼーション データ ソースが、XML ファイルまたは Active Directory のエントリの場合があります。 どちらの場合も、パーソナライゼーションをサポートする適切なスキーマを定義する必要があります。

まとめ

Web サイトをパーソナライズするためには、常に大量の複雑なサポート コードを記述する必要がありました。 しかし、ASP.NET 2.0 の新しいパーソナライゼーション機能を使用すると、開発者は、パーソナライズされたアプリケーションをすばやく作成できるだけでなく、まったく新規のアプリケーションのクラスを構築することもできます。 ユーザー管理システムおよびログイン コントロールにより、ユーザーの認識が以前よりはるかに簡単に行えるようになりました。また、プロファイル機能により、ユーザー データを迅速かつ効率的に格納することも可能になりました。 一方、Web パーツ フレームワークでは、Web サイトのまったく新しいデザイン パラダイムが提供されています。 Web パーツにより、Web サイトで、HTML 標準の基盤である線型のドキュメント書式以外も使用できるようになりました。 Web パーツを使用することにより、柔軟さがはるかに向上し、非常に強力なデスクトップ システムと区別がつかないほどの Web アプリケーションを作成できるようになります。

参考書籍

 

執筆者紹介

Jayesh Patel?Jay Patel は、.NET および Java テクノロジの開発者です。 パターン ベースのプログラミングと機敏なメソドロジを中心に研究を行っています。

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

Robert McGovern?Rob McGovern は Infusion Development のシニア ライターであり、開発者兼プロジェクト マネージャでもあります。 『CodeNotes for ASP.NET』や『JSP to ASP.NET migration guide』などの著者であり、さまざまな ASP.NET プロジェクトに携わった経験があります。

Infusion Development Corporation は、フォーチュン 1000 の企業を対象に、特に金融サービス業の分野で、カスタマイズ ソフトウェアの開発、トレーニング、およびコンサルティング サービスを提供する Microsoft 公認のソリューション プロバイダです。 ニューヨークとトロントに事業所があり、金融サービス、セキュリティ ブローカー、およびソフトウェア開発業における世界最大級の企業を含む国際的な顧客ベースを獲得しています。 Infusion Development の従業員は、CodeNotes ブック シリーズの執筆、作成にも携わっています。