17.5 个性化提供程序
如本章前面的图17-1所示,个性化模型的中间层是个性化API层,它与一系列默认的数据提供程序交互。个性化模型默认使用Microsoft SQL Server Express Edition文件存储我们定义的个性化属性。我们不仅可以使用这个数据库,还可以使用Microsoft SQL Server数据提供程序处理Microsoft SQL Server 7.0、2000和SQL Server 2005。除了Microsoft SQL Server数据提供程序之外,如果这些数据库不能满足要求,该体系结构还允许用户创建自己的数据提供程序。
17.5.1 使用SQL Server Express Edition
Microsoft SQL Server数据提供程序可以使用新的SQL Server Express Edition文件。SQL Server数据提供程序是ASP.NET提供的个性化系统使用的默认提供程序。在与Visual Studio 2005一起使用时,IDE把ASPNETDB.MDF文件放在应用程序的App_Data文件夹中。
查看machine.config文件,注意个性化引擎是如何使用这个数据库的块。在LocalSqlServer文件的第一个引用中,可以在该文件的<connectionStrings>段中找到该文件的连接字符串,如程序清单17-22所示。
程序清单17-22 给SQL Server Express文件添加连接字符串
<configuration>
<connectionStrings>
<clear />
<add name="LocalSqlServer"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;
AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
在这个例子中,定义了一个连接字符串LocalSqlServer。文件的位置由connectionString属性指定,它指向文件的相对路径。这表示,在每个利用新个性化功能的应用程序中,默认的SQL Server提供程序应位于应用程序的App_Data文件夹中,名称是ASPNETDB.MDF。
SQL Server Express文件的连接字符串通过这个<connectionStrings>段中的LocalSqlServer声明指定。在machine.config文件的<profile>段中可以看到个性化引擎对它的引用。<profile>段包含一个子段,其中列出了可用于该个性化引擎的所有提供程序,如程序清单17-23所示。
程序清单17-23 添加新的SQL Server数据提供程序
<configuration>
<system.web>
<profile>
<providers>
<add name="AspNetSqlProfileProvider"
connectionStringName="LocalSqlServer" applicationName="/"
type="System.Web.Profile.SqlProfileProvider, System.Web,
Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</profile>
</system.web>
</configuration>
在这个例子中,使用<add>元素添加了一个提供程序。在这个元素中,connectionStringName属性指向程序清单17-22中<connectionString>属性内声明的内容。
可以指定一个完全不同的Microsoft SQL Server Express Edition文件,来替代在machine.config文件中指定的那个文件。首先,创建一个连接字符串,指向新的SQL Server Express文件,它是ASPNETDB.mdb文件的模板化版本。此时,可以使用<connectionString>指向这个新文件。如果在machine.config文件中修改这些值,位于服务器上的所有ASP.NET应用程序都会使用这个指定的文件。但如果只修改web.config文件,则只有使用该web.config文件的应用程序才会使用这个新数据库。服务器上的其他应用程序不会改变。
17.5.2 使用Microsoft的SQL Server 7.0/2000/2005
使用SQL Server Express文件处理个性化架构是相当容易的。但在处理性能和可靠性要求较高的大型应用程序时,就应使用SQL Server个性化提供程序和SQL Server 7.0、2000或2005。如果这个数据库可用,就应总是使用这个选项,而不是使用默认的SQL Server Express Edition文件。
如果通过SQL Server Express文件使用SQL Server个性化提供程序,就会觉得这很简单。个性化提供程序的工作是一流的,不需要任何设置或配置。但使用SQL Server个性化提供程序和SQL Server的完全版本就是另一番光景了。虽然这并不难,但在使用前必须建立和配置SQL Server。
ASP.NET 2.0提供了两种方式来为个性化架构建立和配置SQL Server。下面几节就介绍这两种方式。一种方式是使用ASP.NET SQL Server Setup向导,另一种方式是运行.NET Framework 2.0提供的一些SQL Server脚本。
提示:
有关ASP.NET SQL Server Setup向导的论述详见第14章。
要使用这个向导为ASP.NET 2.0个性化特性建立SQL Server,必须在Visual Studio 2005 Command Prompt中启动aspnet_regsql.exe,打开它。要打开Visual Studio 2005 Command Prompt,可以选择Start | All Programs | Visual Studio 2005 | Visual Studio Tools |Visual Studio 2005 Command Prompt。在命令提示行中输入 aspnet_regsql.exe,打开ASP.NET SQL Server Setup向导的GUI。如果按照该向导的步骤进行,就可以为许多ASP.NET系统建立SQL Server实例,包括个性化系统。
1. 使用SQL脚本安装个性化特性
另一个选项是使用这些工具和向导使用的SQL脚本。在C:\WINDOWS\Microsoft .NET\ Framework\v2.0.50727\中,可以使用 InstallPersonalization.sql和UninstallPersonalization.sql安装和删除脚本。运行这些脚本可以为数据库提供运行个性化架构所需要的表。在运行个性化脚本(或其他ASP.NET系统脚本)之前,必须先运行InstallCommon.sql脚本。
2. 为SQL Server 2000配置提供程序
现在已建立了SQL Server来使用ASP.NET 2.0提供的个性化功能,下一步是重新定义个性化提供程序,使之使用这个实例,而不是使用默认的SQL Server Express Edition文件。
在web.config文件中完成这个任务。这里要配置提供程序,把这个提供程序实例定义为要使用的提供程序。程序清单17-24中显示了在web.config文件的<profile>段中添加的内容。
程序清单17-24 连接SqlProfileProvider和SQL Server 2000
<configuration>
<connectionStrings>
<add name="LocalSql2000Server"
connectionString="data source=127.0.0.1;Integrated Security=SSPI" />
</connectionStrings>
</configuration>
<profile defaultProvider="AspNetSql2000ProfileProvider">
<providers>
<clear />
<add name="AspNetSql2000ProfileProvider"
connectionStringName="LocalSql2000Server" applicationName="/"
type="System.Web.Profile.SqlProfileProvider, System.Web,
Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
<properties>
<add name="FirstName" />
<add name="LastName" />
<add name="LastVisited" />
<add name="Age" />
<add name="Member" />
</properties>
</profile>
</configuration>
对这个配置定义的唯一修改是使用defaultProvider属性,给它指定一个值,即要使用的提供程序名,这里是新创建的SQL Server提供程序AspNetSql2000ProfileProvider。还可以对machine.config文件进行这样的修改,即修改<profile>元素,如程序清单17-25所示。
程序清单17-25 在machine.config文件中把SQL Server用作提供程序
<configuration>
<system.web>
...
<profile enabled="true" defaultProvider="AspNetSql2000ProfileProvider">
...
</profile>
...
</system.web>
</configuration>
这个修改将迫使服务器上的所有应用程序都使用这个新的SQL Server提供程序,来代替默认的SQL Server提供程序(除非这个命令在应用程序的web.config文件中被重写)。
17.5.3 使用多个提供程序
不仅可以使用单个数据库或提供程序,还可以使用任意多个提供程序。甚至可以为每个定义好的属性指定个性化提供程序。也就是说,可以给大多数属性使用默认的提供程序,让几个属性使用完全不同的提供程序,如程序清单17-26所示。
程序清单17-26 使用不同的提供程序
<configuration>
<system.web>
<profile
defaultProvider="AspNetSqlProvider">
<properties>
<add name="FirstName" />
<add name="LastName" />
<add name="LastVisited" />
<add name="Age" />
<add name="Member" provider="AspNetSql2000ProfileProvider"/>
</properties>
</profile>
</system.web>
</configuration>
在这个例子中,指定了一个默认的提供程序AspNetSqlProvider。除非特别说明,否则就使用这个提供程序。改变这个设置的唯一属性是Member。Member属性使用一个完全不同的个性化提供程序。这里它通过<add>元素的provider属性使用Access提供程序(AspNetSql2000ProfileProvider)。通过这个属性可以为每个已定义的属性指定特定的提供程序。







