实现配置文件提供程序
更新: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 类的必需成员。
下面的表描述必须从 ProviderBase、SettingsProvider 和 ProfileProvider 抽象类实现的属性和方法。若要查看每个成员的实现,请参见 如何:生成并运行配置文件提供程序示例。
ProviderBase 成员
成员 |
说明 |
---|---|
Initialize 方法 |
接受提供程序实例的名称和配置设置的 NameValueCollection 作为输入。用于设置提供程序实例的选项和属性值,其中包括特定于实现的值和计算机配置或 Web.config 文件中指定的选项。 |
SettingsProvider 成员
成员 |
说明 |
---|---|
与每个配置文件一起存储的应用程序名称。配置文件提供程序使用应用程序名称来单独存储每个应用程序的配置文件信息。如果在不同的应用程序中创建相同的用户名,这会使多个 ASP.NET 应用程序在不发生冲突的情况下使用相同的数据源。或者,多个 ASP.NET 应用程序可通过指定相同的应用程序名称来共享配置文件数据源。 |
|
接受 SettingsContext 和 SettingsPropertyCollection 对象作为输入。 SettingsContext 提供有关用户的信息。可以将此信息作为主键使用,以检索用户的配置文件属性信息。使用 SettingsContext 对象来获取用户名,并确定用户是经过身份验证的用户还是匿名用户。 SettingsPropertyCollection 包含 SettingsProperty 对象的集合。每个 SettingsProperty 对象都提供属性的名称和类型以及其他信息,如属性的默认值,以及属性是否为只读。GetPropertyValues 方法用基于作为输入提供的 SettingsProperty 对象的 SettingsPropertyValue 对象来填充 SettingsPropertyValueCollection。来自指定用户的数据源的值被分配给每个 SettingsPropertyValue 对象的 PropertyValue 属性,并返回整个集合。 调用该方法还会将指定的用户配置文件的 LastActivityDate 值更新为当前的日期和时间。 |
|
接受 SettingsContext 和 SettingsPropertyValueCollection 对象作为输入。 SettingsContext 提供有关用户的信息。可以将此信息作为主键使用,以检索用户的配置文件属性信息。使用 SettingsContext 对象来获取用户名,并确定用户是经过身份验证的用户还是匿名用户。 SettingsPropertyValueCollection 包含 SettingsPropertyValue 对象的集合。每个 SettingsPropertyValue 对象都提供属性的名称、类型和值以及其他信息,如属性的默认值,以及属性是否为只读。SetPropertyValues 方法为指定用户更新数据源中的配置文件属性值。 调用此方法还会将指定的用户配置文件的 LastActivityDate 和 LastUpdatedDate 值更新为当前的日期和时间。 |
ProfileProvider 方法
成员 |
说明 |
---|---|
接受用户名的字符串数组作为输入,并在应用程序名称与 ApplicationName 属性值匹配时,从数据源中删除指定名称的所有配置文件信息和属性值。 如果数据源支持事务,建议将所有删除操作包括在事务中,并且如果任何删除操作失败,您可以回滚事务并引发异常。 |
|
接受 ProfileInfo 对象的集合作为输入,并在应用程序名称与 ApplicationName 属性值匹配时,从数据源中删除每个配置文件的所有配置文件信息和属性值。 如果数据源支持事务,建议将所有删除操作包括在事务中,并且如果任何删除操作失败,您可以回滚事务并引发异常。 |
|
接受 ProfileAuthenticationOption 值和 DateTime 对象作为输入,并在上一活动日期小于或等于指定的日期和时间,且应用程序名称与 ApplicationName 属性值匹配时,从数据源中删除所有配置文件信息和属性值。ProfileAuthenticationOption 参数指定是仅删除匿名配置文件,仅删除经过身份验证的配置文件,还是删除所有配置文件。 如果数据源支持事务,建议将所有删除操作包括在事务中,并且如果任何删除操作失败,您可以回滚事务并引发异常。 |
|
接受的输入包括一个 ProfileAuthenticationOption 值、一个指定页索引的整数、一个指定页大小的整数,以及对一个将设置为配置文件总计数的整数的引用。在应用程序名称与 ApplicationName 属性值匹配时,返回包含数据源中所有配置文件的 ProfileInfo 对象的 ProfileInfoCollection。ProfileAuthenticationOption 参数指定是仅返回匿名配置文件,仅返回经过身份验证的配置文件,还是返回所有配置文件。 GetAllProfiles 方法返回的结果受页索引和页大小的值的约束。页大小值指定在 ProfileInfoCollection 中返回的 ProfileInfo 对象的最大数。页索引值指定要返回的结果页,其中 1 表示第一页。用于总记录数的参数是一个 out 参数(在 Visual Basic 中可以使用 ByRef),该参数被设置为配置文件的总数。例如,如果数据存储区中包含 13 个用于应用程序的配置文件,页索引值为 6,页大小为 5,则返回的 ProfileInfoCollection 包含第六到第十个配置文件。当该方法返回时,总记录数的值设置为 13。 |
|
接受的输入包括一个 ProfileAuthenticationOption 值、一个 DateTime 对象、一个指定页索引的整数、一个指定页大小的整数,以及对一个将设置为配置文件总计数的整数的引用。在上一活动日期小于或等于指定的 DateTime,且应用程序名称与 ApplicationName 属性值匹配时,返回包含数据源中所有配置文件的 ProfileInfo 对象的 ProfileInfoCollection。ProfileAuthenticationOption 参数指定是仅返回匿名配置文件,仅返回经过身份验证的配置文件,还是返回所有配置文件。 GetAllInactiveProfiles 方法返回的结果受页索引和页大小的值的约束。页大小值指定在 ProfileInfoCollection 中返回的 ProfileInfo 对象的最大数。页索引值指定要返回的结果页,其中 1 表示第一页。用于总记录数的参数是一个 out 参数(在 Visual Basic 中可以使用 ByRef),该参数被设置为配置文件的总数。例如,如果数据存储区中包含 13 个用于应用程序的配置文件,页索引值为 2,页大小为 5,则返回的 ProfileInfoCollection 包含第六到第十个配置文件。当该方法返回时,总记录数的值设置为 13。 |
|
接受的输入包括一个 ProfileAuthenticationOption 值、一个包含用户名的字符串、一个指定页索引的整数、一个指定页大小的整数,以及对一个将设置为配置文件总计数的整数的引用。在用户名与指定的用户名匹配,且应用程序名称与 ApplicationName 属性值匹配时,返回包含数据源中所有配置文件的 ProfileInfo 对象的 ProfileInfoCollection。ProfileAuthenticationOption 参数指定是仅返回匿名配置文件,仅返回经过身份验证的配置文件,还是返回所有配置文件。 如果数据源支持附加搜索功能(如通配符),则可以为用户名提供更为广泛的搜索功能。 FindProfilesByUserName 方法返回的结果受页索引和页大小的值的约束。页大小值指定在 ProfileInfoCollection 中返回的 ProfileInfo 对象的最大数。页索引值指定要返回的结果页,其中 1 表示第一页。用于总记录数的参数是一个 out 参数(在 Visual Basic 中可以使用 ByRef),该参数被设置为配置文件的总数。例如,如果数据存储区中包含 13 个用于应用程序的配置文件,页索引值为 2,页大小为 5,则返回的 ProfileInfoCollection 包含第六到第十个配置文件。当该方法返回时,总记录数的值设置为 13。 |
|
接受的输入包括一个 ProfileAuthenticationOption 值、一个包含用户名的字符串、一个 DateTime 对象、一个指定页索引的整数、一个指定页大小的整数,以及对一个将设置为配置文件总计数的整数的引用。在用户名与指定的用户名匹配,上一活动日期小于或等于指定的 DateTime,且应用程序名称与 ApplicationName 属性值匹配时,返回包含数据源中所有配置文件的 ProfileInfo 对象的 ProfileInfoCollection。ProfileAuthenticationOption 参数指定是仅返回匿名配置文件,仅返回经过身份验证的配置文件,还是返回所有配置文件。 如果数据源支持附加搜索功能(如通配符),则可以为用户名提供更为广泛的搜索功能。 FindInactiveProfilesByUserName 方法返回的结果受页索引和页大小的值的约束。页大小值指定在 ProfileInfoCollection 中返回的 ProfileInfo 对象的最大数。页索引值指定要返回的结果页,其中 1 表示第一页。用于总记录数的参数是一个 out 参数(在 Visual Basic 中可以使用 ByRef),该参数被设置为配置文件的总数。例如,如果数据存储区中包含 13 个用于应用程序的配置文件,页索引值为 2,页大小为 5,则返回的 ProfileInfoCollection 包含第六到第十个配置文件。当该方法返回时,总记录数的值设置为 13。 |
|
接受 ProfileAuthenticationOption 值和 DateTime 对象作为输入,并在上一活动日期小于或等于指定的 DateTime,且应用程序名称与 ApplicationName 属性值匹配时,返回数据源中所有配置文件的计数。ProfileAuthenticationOption 参数指定是仅计算匿名配置文件,仅计算经过身份验证的配置文件,还是计算所有配置文件。 |
ApplicationName
因为配置文件提供程序为每个应用程序单独存储配置文件信息,所以必须确保数据架构包含应用程序名称,并确保查询和更新也包含应用程序名称。例如,下面的命令用于根据用户名和配置文件是否为匿名从数据库中检索属性值,并确保 ApplicationName 值包含在查询中。
SELECT Property FROM PropertyTable
WHERE Username = 'user1' AND IsAnonymous = False
AND ApplicationName = 'MyApplication'