一、数据库配置 默认情况下,第一次执行与用户配置功能有关的应用程序时,系统将自动为该应用程序创建一个SQL Server 2005 Express的特定数据库实例,位于App_Data下的ASPNETDB.MDF。当然我们可以使用微软其它的数据库,例如SQL Server 2000,7.0。而这就需要用到aspnet_regsql命令了,该命令会在你配置的数据库中创建一个名为aspnetdb的数据库实例,并使用该数 据库存储用户配置信息。MSDN上这样描述:ASP.NET SQL Server 注册工具用于创建供 ASP.NET 中的 SQL Server 提供程序使用的 Microsoft SQL Server 数据库,或者用于在现有数据库中添加或移除选项。Aspnet_regsql.exe 文件位于 Web 服务器上的 [drive:]\WINDOWS\Microsoft.NET\Framework\versionNumber 文件夹中。aspnet_regsql有两种配置方法,一是通过命令行传递参数的形式,二是使用向导。 1)带有参数的aspnet_regsql -总的信息和功能
比如: aspnet_regsql.exe –A p –E (-A p表示在数据库中添加支持用户配置功能的数据表、储存过程等对象;-E表示使用Windows集成验证方式登录数据库。执行以上代码,将会在SQL Server2000/7。0中创建一个aspnetdb数据库实例,当然你可以用-d参数使用你已经定义好了的数据库实例,在该实例中创建了4个表,他 们是aspnet_Applications、aspnet_Profile、aspnet_SchemaVersions、aspnet_Users)
比如:aspnet_regsql -S localhost -U sa -P wrox -ssadd -sstype p
比如: aspnet_regsql.exe -S localhost -U sa -P password -d Northwind -t Products –et -------------------------- 使用Visual Studio 2005创建了一个本地文件系统的网站,目录为F:\codes\Site\。并且,在App_Data目录下,新建了一个SQL Express的实例——MyDB.mdf 现在,使用aspnet_regsql工具向MyDB中注册MemberShip相关的脚本。 尝试直接启用aspnet_regsql的图形界面,没有办法访问到SQL Express的实例MyDB.mdf 但可以使用这样的命令完成此工作: aspnet_regsql -A all -C "Data Source=.\SQLEXPRESS;Integrated Security=True;User Instance=True" -d "F:\codes\Site\App_Data\MyDB.mdf" -------------------------- 2)使用向导方式 在命令行输入aspnet_regsql,将显示一个向导窗口,一路下去,比较简单就能完成相应的配置。这些配置不仅将支持本文所要重点讨论的用户配置,而且还支持成员资格、角色管理、Web部件个性化、Web事件等在内的多个功能特征。 这里需要注意的是第三步,选择服务器和数据库。如果选的是“创建默认数据库”。那么在随后的执行过程中,将新建一个数据库实例aspnetdb.。 二、修改配置文件 上文说过,配置文件中默认是用SQL Server 2005 Express,这里我们打算把应用服务的这些功能迁移到2000/7.0数据库中。也有两个方法,一个方法是修改machine.config,另一个方法是修改web.config. 1)修改machine.config 默认情况下,machine.config位于[drive:]\WINDOWS\Microsoft.NET\Framework\versionNumber\config 文件夹中.下面是未修改的部分节点: <?xml version="1.0" encoding="UTF-8"?> <configuartion> ..... <connectionStrings> ..... <profile> ..... </configuration> 上面的n a m e中间是没空格的,网易blog竟然对内容进行了过滤,无奈只好如此写了,在此表示批评和抗议,希望技术人员能够予以改进,毕竟法律赋予了我们言论自由的权利! 注意:这里包含了一个名为LocalSqlServer的连接字符串,默认使用的数据库服务器是SQL Server2005 Express,所使用的数据库实例是aspnetdb.mdf;同时,默认使用的用户配置提供程序是 System.Web.Profile.SqlProfileProvider,其使用了LocalSqlServer连接字符串。 machine.config文件中很多配置使用了LocalSqlServer连接字符串。我们要改的重点就在LocalSqlServer上了,修改 如下: ..... <connectionStrings> ..... 这种方法很少使用,原因在于服务器中运行的应用程序配置大都不相同。在实际应用中,推荐使用第二种方法。 2)修改Web.config 示例代码如下 <?xml version="1.0" encoding="UTF-8"?> <configuartion> ..... <connectionStrings> ..... <profile defaultProvider="SqlProvider"> <clear/> ..... </configuration> 通过connectionStrings定义了SqlService连接字符串,profile节调用了<clear/>,清除从 machine.config文件继承的相关用户配置提供的程序设置。另外,还定义了一个新的用户配置提供程序SqlProvider,作为应用程序 Witkey的默认提供程序。如果整个站点只配置了一个应用程序,applicationName="/"。 三、实现自定义用户配置提供程序 asp.net 2.0允许用户配置属性数据存储到其他数据源中去,如Oracle,Access等,主要步骤如下: 1)创建存储用户配置数据的数据库,创建相应的数据表,一般要记录用户名称、应用程序名称、是否匿名、上次活动时间、上次更新时间、以及需要记录的页面数据等; 2)设置事件日志访问,将异常信息存储到Windows应用程序事件日志中去。这个步骤是可选的。首先在注册表下注 册:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog \Application\XxxProvider;然后就可以在下一步中采用以下代码: private void WriteToEventLog(Exception e,string action) { EventLog log = new EventLog(); log.Source = XxxProvider; log.Log = "Application"; string msg = "处理数据出错了..."; msg + = "Action:" + action + "\n\nException:" + e.ToString(); log.WriteEntry(msg); } 3)实现自定义用户配置提供程序。该步骤是实现的核心。必须实现其父类的以下成员和方法: ProviderBase类中的Initialize方法,主要实现用户配置提供程序初始化,例如调用基类方法,设置应用程序名称、设置连接字符串等; SettingsProvider类中的ApplicationName属性、GetPropertyValues,SetPropertyValues方法,主要实现配置属性的读取,例如获取用户信息,设置属性的默认值等。 ProfileProvider类中的DeletProfiles(2个)、DeleteInactiveProfiles、 GetAllProfiles、GetAllInactiveProfiles、FindProfilesByUserName、 FindInactiveProfilesByUserName、GetNumberOfInactiveProfiles方法,主要实现用户信息的保存 和获取。 4)配置Web.config文件中的<profile>,包括所使用的用户配置提供程序、连接字符串名称、用户配置属性等。 5)应用自定义用户配置管理程序,实际上和不采用自定义数据库的代码没有区别。 注:由上面看来,这样开发难度还是太大,不如自定义开发。推荐还是使用微软的数据库,可以省很多代码,我们使用.net追求的就是效率嘛!当然为了满足比 较bt客户的需求,你可能会遇到非要这样做不可的时刻,那么请参看<Asp.Net 2.0开发指南>一书,本文的大体内容都是从以上书中借取,结合自己的试验所作。说心里话,这书内容很全,不过感觉没有<asp.net 2.0高级编程>写得有条理。 |
ASP.NET 2.0 个性化用户配置
最新推荐文章于 2024-09-18 15:08:51 发布