1.1.2 个性化服务

另一个要介绍的服务是个性化,它提供了一种现成的解决方案,用于解决存储站点用户的个性化设置问题。目前,通常的解决方法是存储在Cookie、后端数据库或这两者中。无论这些设置存储在何处,ASP.NET 1.x都不能提供什么帮助。这需要由你来设置和管理后端数据存储,以及使用经过身份验证的用户名、Cookie或其他某种机制来关联个性化数据。

使用ASP.NET 2.0中新的个性化设置服务,可以方便地在Web应用程序中创建自定义体验。使用Profile对象可以方便地为用户账户生成固定的强类型数据存储区,还可以生成高度自定义的、基于关系的体验。同时,利用Web部件和个性化设置服务,还可使网站访问者能够完全控制站点的布局和行为,这样站点对访问者来说是完全可自定义的。现在生成个性化设置方案比以前要方便得多,也容易得多,需要实现的代码和花费的精力都显著减少。

ASP.NET 2.0提供了一个在System.Web.Profile命名空间中定义的预定义的提供程序:SqlProfileProvider。它从SQL Server 2005 Express中的aspnetdb.mdf数据库的一个表中读取配置文件数据,并把配置文件数据写入其中。请求开始时,配置文件提供程序会从一个数据存储中读取配置文件值,并在请求结束时,把修改的值返回到数据存储中。同时配置文件表中为每个用户包含了一个记录。事实上系统默认的配置往往不能满足我们的需求,比如我们需要把配置文件信息存储到另一个SQL Server数据库的表中,或者要存储到其他数据库系统(Oracle),这时我们需要做的仍然是编写一个自定义的提供程序。如在.Net PetShop 4.0中通过重写ProfileProvider里的部分方法并结合工厂模式,实现在自己的数据库里记录自己想要的个性化用户信息。主要实现在PetShop.Profile命名空间中,其封装类为PetShopProfileProvider,该类继承自.Net框架ProfileProvider类,然后通过重写Initialize、SettingsPropertyValue Collection、SetPropertyValues、DeleteProfiles、DeleteProfiles、DeleteInactiveProfiles等一系列方法来实现。最后通过配置文件来完成整个自定义实现过程。有兴趣的读者可以去仔细研究,确实是一个不错的例子。

小提示

(1)由于一个提供程序的契约的所有方法和属性都标记成了抽象,所以所有自定义的提供程序必须实现所有成员。但是一些提供程序的方法不需要实现,这时可以采用一个空的实现或者抛出一个异常:

throw new Exception("The method or operation is not implemented.")

(2)在保证内部表结构布局不变的情况下,可以采用修改程序的Web.Config文件中的连接字符串,来将数据存储方式改为SQL Server 2000或SQL Server 2005。

(3).NET Framework本身提供了一个ProviderException类,出现有关异常的详细信息,适当的时候可以直接使用或派生其子类来处理系统异常。

(4)提供程序是ASP.NET 2.0中最重要的特性之一,有关更多的信息和代码示例,请访问微软资源:http://msdn2.microsoft.com/zh-cn/asp.net/aa336558.aspx