次の方法で共有


プロファイル プロバイダの実装

更新 : 2007 年 11 月

ASP.NET のプロファイル機能によって、複数のプロバイダを簡単に使用できます。.NET Framework に用意されている SqlProfileProvider クラスを使用することも、独自のプロバイダを実装することもできます。

カスタム プロファイル プロバイダは、次のような場合に作成します。

  • .NET Framework のプロファイル プロバイダでサポートされていないデータ ソース (FoxPro データベース、Oracle データベースなど) にプロファイル情報を格納する必要がある場合。

  • .NET Framework に付属するプロバイダが使用するデータベース スキーマとは異なるデータベース スキーマを使用してプロファイル情報を管理する必要がある場合。一般的な例としては、プロファイル情報を既存の SQL Server データベースのユーザー データと統合する場合があります。

必要なクラス

プロファイル プロバイダを実装するには、System.Web.Profile.ProfileProvider 抽象クラスを継承するクラスを作成します。ProfileProvider 抽象クラスは System.Configuration.SettingsProvider 抽象クラスを継承し、このクラスはさらに System.Configuration.Provider.ProviderBase 抽象クラスを継承します。この継承チェーンがあるために、ProfileProvider クラスに必要なメンバだけでなく、SettingsProvider クラスと ProviderBase クラスに必要なメンバも実装する必要があります。

次の表では、ProviderBaseSettingsProvider、および ProfileProvider の各抽象クラスから実装する必要があるプロパティとメソッドについて説明します。各メンバの実装については、「方法 : プロファイル プロバイダの構築と実行の例」を参照してください。

ProviderBase メンバ

メンバ

説明

Initialize メソッド

プロバイダ インスタンスの名前および構成設定の NameValueCollection を入力として受け取ります。コンピュータ構成または Web.config ファイルに指定されている実装固有の値とオプションを含むプロバイダ インスタンスのオプションとプロパティ値を設定するために使用します。

SettingsProvider のメンバ

メンバ

説明

ApplicationName プロパティ

各プロファイルと共に格納されるアプリケーション名です。プロファイル プロバイダは、各アプリケーションのプロファイル情報を個別に格納するためにアプリケーション名を使用します。これによって、複数の ASP.NET アプリケーションで同じユーザー名が作成された場合にも競合せずに同じデータ ソースを使用できます。または、複数の ASP.NET アプリケーションが同じアプリケーション名を指定してプロファイル データ ソースを共有することもできます。

GetPropertyValues メソッド

SettingsContextSettingsPropertyCollection オブジェクトを入力として受け取ります。

SettingsContext は、ユーザーに関する情報を提供します。この情報は、ユーザーのプロファイル プロパティの情報を取得するための主キーとして使用できます。SettingsContext オブジェクトを使用してユーザー名を取得し、ユーザーが認証されているかまたは匿名かを取得します。

SettingsPropertyCollection には、SettingsProperty オブジェクトのコレクションが含まれます。各 SettingsProperty オブジェクトは、プロパティの名前と型だけでなく、プロパティの既定値、プロパティが読み取り専用かどうかなどの追加情報も提供します。GetPropertyValues メソッドは、入力として提供される SettingsProperty のオブジェクトに基づいて SettingsPropertyValueCollectionSettingsPropertyValue を格納します。指定されたユーザーのデータ ソースの値は、各 SettingsPropertyValue オブジェクトの PropertyValue プロパティに割り当てられ、コレクション全体が返されます。

このメソッドを呼び出すと、指定されたユーザーのプロファイルの LastActivityDate 値も現在の日時に更新されます。

SetPropertyValues メソッド

SettingsContextSettingsPropertyValueCollection オブジェクトを入力として受け取ります。

SettingsContext は、ユーザーに関する情報を提供します。この情報は、ユーザーのプロファイル プロパティの情報を取得するための主キーとして使用できます。SettingsContext オブジェクトを使用してユーザー名を取得し、ユーザーが認証されているかまたは匿名かを取得します。

SettingsPropertyValueCollection には、SettingsPropertyValue オブジェクトのコレクションが含まれます。各 SettingsPropertyValue オブジェクトは、プロパティの名前、型、および値だけでなく、プロパティの既定値、プロパティが読み取り専用かどうかなどの追加情報も提供します。SetPropertyValues メソッドは、指定されたユーザーのデータ ソースのプロファイル プロパティ値を更新します。

このメソッドを呼び出すと、指定されたユーザーのプロファイルの LastActivityDate 値と LastUpdatedDate 値も現在の日時に更新されます。

ProfileProvider のメンバ

メンバ

説明

DeleteProfiles メソッド

ユーザー名の文字列配列を入力として受け取り、アプリケーション名が ApplicationName プロパティ値に一致する場合は、指定された名前のすべてのプロファイル情報とプロパティ値をデータ ソースから削除します。

データ ソースがトランザクションをサポートする場合は、すべての削除操作をトランザクションに含めて、削除操作が失敗した場合は例外をスローしてトランザクションをロールバックすることをお勧めします。

DeleteProfiles メソッド

ProfileInfo オブジェクトのコレクションを入力として受け取り、アプリケーション名が ApplicationName プロパティ値に一致する場合は、各プロファイルのすべてのプロファイル情報とプロパティ値をデータ ソースから削除します。

データ ソースがトランザクションをサポートする場合は、すべての削除操作をトランザクションに含めて、削除操作が失敗した場合は例外をスローしてトランザクションをロールバックすることをお勧めします。

DeleteInactiveProfiles メソッド

ProfileAuthenticationOption 値と DateTime オブジェクトを入力として受け取り、最終活動日が指定された日時と同じまたはそれ以前で、アプリケーション名が ApplicationName プロパティ値に一致する場合は、すべてのプロファイル情報とプロパティ値をデータ ソースから削除します。ProfileAuthenticationOption パラメータには、匿名プロファイルのみ、認証されているプロファイルのみ、またはすべてのプロファイルのどの対象を削除するかを指定します。

データ ソースがトランザクションをサポートする場合は、すべての削除操作をトランザクションに含めて、削除操作が失敗した場合は例外をスローしてトランザクションをロールバックすることをお勧めします。

GetAllProfiles メソッド

ProfileAuthenticationOption 値、ページ インデックスを指定する整数、ページ サイズを指定する整数、およびプロファイルの総数に設定される整数への参照を入力として受け取ります。アプリケーション名が ApplicationName プロパティ値に一致する場合、データ ソースのすべてのプロファイルの ProfileInfo オブジェクトを含む ProfileInfoCollection を返します。ProfileAuthenticationOption パラメータには、匿名プロファイルのみ、認証されているプロファイルのみ、またはすべてのプロファイルのどの対象を返すかを指定します。

GetAllProfiles メソッドが返す結果は、ページ インデックスとページ サイズの値によって制限されます。ページ サイズ値には、ProfileInfoCollection で返す ProfileInfo オブジェクトの最大数を指定します。ページ インデックス値には結果のどのページを返すかを指定し、1 は最初のページを表します。レコードの総数を表すパラメータは Out パラメータで、プロファイルの総数に設定されます (Visual Basic では ByRef を使用)。たとえば、データ ストアにアプリケーションのプロファイルが 13 あり、ページ インデックス値が 6、ページ サイズ値が 5 の場合、返される ProfileInfoCollection には 6 番目から 10 番目のプロファイルが含まれます。メソッドが戻るとき、レコード総数の値は 13 に設定されます。

GetAllInactiveProfiles メソッド

ProfileAuthenticationOption 値、DateTime オブジェクト、ページ インデックスを指定する整数、ページ サイズを指定する整数、およびプロファイルの総数に設定される整数への参照を入力として受け取ります。最終活動日が指定された DateTime と同じまたはそれ以前で、アプリケーション名が ApplicationName プロパティ値に一致する場合、データ ソースのすべてのプロファイルに対して ProfileInfo オブジェクトを含む ProfileInfoCollection を返します。ProfileAuthenticationOption パラメータには、匿名プロファイルのみ、認証されているプロファイルのみ、またはすべてのプロファイルのどの対象を返すかを指定します。

GetAllInactiveProfiles メソッドが返す結果は、ページ インデックスとページ サイズの値によって制限されます。ページ サイズ値には、ProfileInfoCollection で返す ProfileInfo オブジェクトの最大数を指定します。ページ インデックス値には結果のどのページを返すかを指定し、1 は最初のページを表します。レコードの総数を表すパラメータは Out パラメータで、プロファイルの総数に設定されます (Visual Basic では ByRef を使用)。たとえば、データ ストアにアプリケーションのプロファイルが 13 あり、ページ インデックス値が 2、ページ サイズ値が 5 の場合、返される ProfileInfoCollection には 6 番目から 10 番目のプロファイルが含まれます。メソッドが戻るとき、レコード総数の値は 13 に設定されます。

FindProfilesByUserName メソッド

ProfileAuthenticationOption 値、ユーザー名を含む文字列、ページ インデックスを指定する整数、ページ サイズを指定する整数、およびプロファイルの総数に設定される整数への参照を入力として受け取ります。ユーザー名が指定されたユーザー名に一致し、アプリケーション名が ApplicationName プロパティ値に一致する場合、データ ソースのすべてのプロファイルの ProfileInfo オブジェクトを含む ProfileInfoCollection を返します。ProfileAuthenticationOption パラメータには、匿名プロファイルのみ、認証されているプロファイルのみ、またはすべてのプロファイルのどの対象を返すかを指定します。

データ ソースがワイルドカード文字などの追加検索機能をサポートする場合は、より強力な機能を使用してユーザー名を検索できます。

FindProfilesByUserName メソッドが返す結果は、ページ インデックスとページ サイズの値によって制限されます。ページ サイズ値には、ProfileInfoCollection で返す ProfileInfo オブジェクトの最大数を指定します。ページ インデックス値には結果のどのページを返すかを指定し、1 は最初のページを表します。レコードの総数を表すパラメータは Out パラメータで、プロファイルの総数に設定されます (Visual Basic では ByRef を使用)。たとえば、データ ストアにアプリケーションのプロファイルが 13 あり、ページ インデックス値が 2、ページ サイズ値が 5 の場合、返される ProfileInfoCollection には 6 番目から 10 番目のプロファイルが含まれます。メソッドが戻るとき、レコード総数の値は 13 に設定されます。

FindInactiveProfilesByUserName メソッド

ProfileAuthenticationOption 値、ユーザー名を含む文字列、DateTime オブジェクト、ページ インデックスを指定する整数、ページ サイズを指定する整数、およびプロファイルの総数に設定される整数への参照を入力として受け取ります。最終活動日が指定された DateTime と同じまたはそれ以前で、アプリケーション名が ApplicationName プロパティ値に一致する場合、データ ソースのすべてのプロファイルに対して ProfileInfo オブジェクトを含む ProfileInfoCollection を返します。ProfileAuthenticationOption パラメータには、匿名プロファイルのみ、認証されているプロファイルのみ、またはすべてのプロファイルのどの対象を返すかを指定します。

データ ソースがワイルドカード文字などの追加検索機能をサポートする場合は、より強力な機能を使用してユーザー名を検索できます。

FindInactiveProfilesByUserName メソッドが返す結果は、ページ インデックスとページ サイズの値によって制限されます。ページ サイズ値には、ProfileInfoCollection で返す ProfileInfo オブジェクトの最大数を指定します。ページ インデックス値には結果のどのページを返すかを指定し、1 は最初のページを表します。レコードの総数を表すパラメータは Out パラメータで、プロファイルの総数に設定されます (Visual Basic では ByRef を使用)。たとえば、データ ストアにアプリケーションのプロファイルが 13 あり、ページ インデックス値が 2、ページ サイズ値が 5 の場合、返される ProfileInfoCollection には 6 番目から 10 番目のプロファイルが含まれます。メソッドが戻るとき、レコード総数の値は 13 に設定されます。

GetNumberOfInactiveProfiles メソッド

ProfileAuthenticationOption 値と DateTime オブジェクトを入力として受け取り、最終活動日が指定された DateTime と同じまたはそれ以前で、アプリケーション名が ApplicationName プロパティ値に一致する場合は、データ ソースのプロファイルの総数を返します。ProfileAuthenticationOption パラメータには、匿名プロファイルのみ、認証されているプロファイルのみ、またはすべてのプロファイルのどの対象をカウントするかを指定します。

ApplicationName

プロファイル プロバイダはアプリケーションごとにプロファイル情報を格納するため、データ スキーマだけでなく、クエリや更新にもアプリケーション名が含まれていることを確認する必要があります。たとえば、次のコマンドを使用すると、ユーザー名およびプロファイルが匿名かどうかに基づいてデータベースからプロパティ値を取得し、クエリに ApplicationName が含まれていることを確認できます。

SELECT Property FROM PropertyTable 
  WHERE Username = 'user1' AND IsAnonymous = False 
  AND ApplicationName = 'MyApplication'

参照

処理手順

方法 : プロファイル プロバイダの構築と実行の例

概念

ASP.NET プロファイル プロパティの概要

ASP.NET プロファイル プロバイダ