方法 : プロファイル プロバイダの構築と実行の例
更新 : 2007 年 11 月
このセクションのトピックには、ASP.NET プロファイル プロバイダのコード例が含まれます。このサンプル プロバイダは .NET Framework ODBC 用データ プロバイダを使用して ODBC データ ソースに接続します。この例では、データ ソースとして Access データベースを使用します。
このトピックでは、サンプル プロファイル プロバイダの実装の詳細、およびサンプル プロファイル プロバイダを作成して ASP.NET アプリケーションで使用するように構成する方法を説明します。
メモ : |
---|
データ ソースはさまざまな SQL 構文をサポートするため、SQL コマンドによっては特定のデータ ソースだけを使用し、別のデータ ソースを使用しないものもあります。したがって、データ ソースにアクセスするために .NET Framework ODBC 用データ プロバイダまたは .NET Framework OLE DB 用データ プロバイダを使用する場合にも、データ ソースに固有のプロファイル プロバイダを作成することをお勧めします。たとえば、SybaseProfileProvider、OracleProfileProvider などのプロバイダを個別に作成します。 |
サンプル プロバイダのコードについては、「プロファイル プロバイダの実装例」を参照してください。
プロバイダ データベースの作成
プロバイダは、Profiles、StockSymbols、および ProfileData の 3 つのデータベース テーブルのデータを読み書きするように設計されています。このサンプル プロファイル プロバイダは、株式銘柄の一覧と ZIP (郵便) コードの 2 つのプロファイル プロパティをサポートします。
各ユーザー プロファイルは、データベースの Profiles テーブルで一意に識別されます。アプリケーション名、最終活動日などのプロファイル情報はこのテーブルに含まれます。Profiles テーブルには、各行を一意に識別し、このテーブルをデータベースのプロファイル プロパティ値を含む他のテーブルに関連付けるために使用する自動的にインクリメントされる主キーが含まれます。
StockSymbols テーブルには、StockSymbols プロパティを使用して格納および取得される株式銘柄の一覧の値が含まれます。1 つのユーザー プロファイルが任意の数の株式銘柄を追跡できるため、StockSymbols テーブルには Profiles テーブルとの 1 対多のリレーションシップがあります。
ZipCode プロパティ値は、ProfileData テーブルに格納されます。ProfileData テーブルには、Profiles テーブルとの 1 対 1 のリレーションシップがあります。
プロファイルを格納するためのデータベース テーブルを作成するには
新しい Microsoft Access データベースを作成するか、または既存のデータベースを開きます。
メモ : データベースを Web アプリケーションのファイル フォルダに格納する場合は、アプリケーションの App_Data フォルダに格納することをお勧めします。App_Data フォルダの内容はアプリケーション コードで使用できますが、Web 要求には公開されません。さらに、ASP.NET プロセスには App_Data フォルダへの読み取り/書き込みアクセス許可が与えられます。
Access データベースでテーブルを作成できる Access およびその他のツールで、次のデータ定義クエリを発行して Profiles テーブルを作成します。
CREATE TABLE Profiles ( UniqueID AutoIncrement NOT NULL PRIMARY KEY, Username Text (255) NOT NULL, ApplicationName Text (255) NOT NULL, IsAnonymous YesNo, LastActivityDate DateTime, LastUpdatedDate DateTime, CONSTRAINT PKProfiles UNIQUE (Username, ApplicationName) )
次のデータ定義クエリを発行して StockSymbols テーブルを作成します。
CREATE TABLE StockSymbols ( UniqueID Integer, StockSymbol Text (10), CONSTRAINT FKProfiles1 FOREIGN KEY (UniqueID) REFERENCES Profiles )
次のデータ定義クエリを発行して ProfileData テーブルを作成します。
CREATE TABLE ProfileData ( UniqueID Integer, ZipCode Text (10), CONSTRAINT FKProfiles2 FOREIGN KEY (UniqueID) REFERENCES Profiles )
イベント ログへのアクセスの提供
サンプル プロバイダがデータ ソースの使用時に例外を検出すると、ASP.NET アプリケーションに例外を返す代わりに、例外の詳細を Windows アプリケーション イベント ログに書き込みます。これは、データ ソースに関する個人情報が ASP.NET 内で公開されないようにするためのセキュリティ対策です。
サンプル プロバイダは、"OdbcProfileProvider" という Source イベントを指定します。ASP.NET アプリケーションがアプリケーション イベント ログに正常に書き込むことができるようにするには、イベント ログへのアクセスを作成する必要があります。
メモ : |
---|
サンプル プロバイダがイベント ログに例外を書き込まないようにするには、Web.config ファイルのプロバイダ構成の writeExceptionsToEventLog 属性を false に設定します。 |
イベント ログへのアクセスを提供するには
Regedit.exe またはその他の Windows レジストリ編集ツールを使用して、次のレジストリ キーを作成します。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\OdbcProfileProvider
サンプル プロバイダのビルド
サンプル プロバイダを使用するには、Web アプリケーションでコードを使用できるようにする必要があります。これには次の 2 つの方法があります。
サンプル プロバイダのソース コードをアプリケーションの App_Code フォルダに保存します。その場合、サンプル コードを手動でコンパイルする必要はありません。
コードをコンパイルして生成されるアセンブリをアプリケーションの Bin フォルダに置くか、または厳密な名前を指定してグローバル アセンブリ キャッシュに置きます。
手動でコンパイルせずにサンプル プロバイダをテストするには
アプリケーションに App_Code というフォルダがない場合は、アプリケーションのルートに作成します。
使用するプログラミング言語によって、App_Code フォルダに OdbcProfileProvider.vb または OdbcProfileProvider.cs というテキスト ファイルを作成します。
メモ : アプリケーションの App_Code ディレクトリに既にソース コードがある場合は、ディレクトリ内の既存のコードと同じ言語で記述されたサンプル プロバイダのバージョンを使用します。プロバイダは、ASP.NET アプリケーションからページが初めて要求されたときにコンパイルされます。
適切な言語のサンプル ソース コードを対応するテキスト ファイルにコピーしてからファイルを保存します。
サンプル プロバイダをコンパイルするには
カスタム コントロールおよび関連するクラスのソース ファイルを格納するフォルダを作成します。
使用するプログラミング言語によって、ソース コードのフォルダに OdbcProfileProvider.vb または OdbcProfileProvider.cs というテキスト ファイルを作成します。
メモ : この例を手動でコンパイルし、アセンブリを Bin フォルダに追加する場合は、ソース コードを App_Code フォルダに置かないでください。このフォルダに置くと、コンパイルされたアセンブリと ASP.NET によって App_Code フォルダから動的に生成されたアセンブリの両方のプロバイダの型が存在することになります。これによって、プロバイダを読み込むときにあいまいな参照が生成され、この型を参照するコードはコンパイル エラーを生成します。
各サンプルのソース コードを対応するテキスト ファイルにコピーしてからファイルを保存します。
ソース コードのフォルダから次のコマンドを実行し、コントロールおよび関連するクラスをコンパイルしてアセンブリを生成します。
vbc /out:OdbcProfileProvider.dll /t:library OdbcProfileProvider.vb /r:System.Web.dll /r:System.Configuration.dll
csc /out:OdbcProfileProvider.dll /t:library OdbcProfileProvider.cs /r:System.Web.dll /r:System.Configuration.dll
/t:library コンパイラ オプションを指定すると、実行可能なアセンブリではなくライブラリが作成されます。/out オプションにはアセンブリの名前を指定し、/r オプションにはこのアセンブリにリンクするアセンブリを列挙します。
メモ : コンパイラ コマンドを実行できない場合は、コマンドを実行する前に .NET Framework のインストール パスを PATH 変数に追加する必要があります。Windows で、[マイ コンピュータ] アイコンを右クリックし、[プロパティ] をクリックします。次に、[詳細設定] タブで、[環境変数] をクリックします。[システム環境変数] の一覧の Path 変数をダブルクリックします。[変数値] ボックスで、既存の値の最後にセミコロン (;) を追加し、各自の .NET Framework のインストール パスを入力します。通常の場合、.NET Framework は Windows のインストール フォルダ (\Microsoft.NET\Framework\versionNumber) にインストールされます。
ASP.NET アプリケーションでのサンプル プロバイダの構成
ASP.NET Web アプリケーションでサンプル プロバイダを使用するには、アプリケーションを構成してプロバイダを登録する必要があります。
この構成例では、Web サイトがフォーム認証を使用するように設定され、ユーザーのログインを許可し、ユーザーの ID を確立するための Login.aspx という ASP.NET ページがあることを前提にしています。この構成例では匿名の認証もサポートするため、ユーザーはログインを要求されません。
サンプル プロバイダを使用するようにアプリケーションを構成するには
Login.aspx という ASP.NET ページを作成し、次のいずれかを実行します。
アプリケーションが既に ASP.NET メンバシップを使用するように構成されている場合は、Login コントロールを追加します。
ログイン フォームを作成し、フォーム認証を使用してユーザーを認証します。詳細については、「方法 : 簡単なフォーム認証を実装する」を参照してください。
メモ : フォーム認証に必要な構成要素は手順 4 に記載されています。
各自のコンピュータに "OdbcProfile" という DSN を作成し、以前に作成した Access データベースへの接続情報を含めます。
ASP.NET アプリケーションに Web.config というテキスト ファイルがない場合は、アプリケーションのルート フォルダに作成します。
Web.config ファイルに次の要素を追加します。
<configuration> <connectionStrings> <add name="OdbcProfile" connectionString="DSN=OdbcProfile;" /> </connectionStrings> <system.web> <authentication mode="Forms" > <forms loginUrl="login.aspx" name=".ASPXFORMSAUTH" /> </authentication> <anonymousIdentification enabled="true" /> <profile defaultProvider="OdbcProvider"> <providers> <add name="OdbcProvider" type="Samples.AspNet.Profile.OdbcProfileProvider" connectionStringName="OdbcProfile" /> </providers> <properties> <add name="ZipCode" allowAnonymous="true" /> <add name="CityAndState" provider="AspNetSqlProfileProvider" allowAnonymous="true" /> <add name="StockSymbols" type="System.Collections.ArrayList" allowAnonymous="true" /> </properties> </profile> </system.web> </configuration>