【转贴】考察ASP.NET 2.0的Membership, Roles, and Profile - Part 7

导读:
  本文英文原版及代码下载:
  http://aspnet.4guysfromrolla.com/articles/101806-1.aspx
  考察ASP.NET 2.0的Membership, Roles, and Profile - Part 7
  导言:
  在前6章我们考察了.NET Framework包括的那些provider——比如SqlMembershipProvider, SqlRoleProvider, SqlProfileProvider等.实际上
  我们可以下载这些provider的源代码,以及一个Provider工具包来创建我们自己的provider(http://msdn2.microsoft.com/en-
  us/asp.net/aa336558.aspx),而Scott Guthrie在他的博客文章《ASP.NET 2.0 Membership, Roles, Forms Authentication, and Security
  Resources》(http://weblogs.asp.net/scottgu/archive/2006/02/24/ASP.NET-2.0-Membership_2C00_-Roles_2C00_-Forms-
  Authentication_2C00_-and-Security-Resources-.aspx)里列出了很多自定义的Membership, Roles, and Profile provider.
  如果这些内置的provider无法满足你的需要,你可以创建自己的provider.本文,我们将探讨创建和使用一个自定义provider,然后用一个简单
  的自定义provider将profile信息存储到一个XML文件里.
  Profile System的职责
  像在Part 6探讨的一样,Profile System允许用户在Web.config文件定义一系列的 "profile properties",然后在某些存储备份(backing
  store)里保存和读取这些属性值.
  如果这些内置Profile providers不能满足需要,你可以创建你自己的provider。创建一个用户定制provider——不管是用于Profile,
  Membership, Roles, ASP.NET site map,或是其他的什么子系统,都有遵循如下的步骤:
  1.创建用户定制provider——创建源自ProfileProvider class类的一个类.
  2.设置应用程序使用用户定制provide——我们需要在Web.config文件里指定Profile system使用我们的定制provid而不是默认的
  SqlProfileProvider。
  微软的Provider Toolkit web page页面里有关于学习创建用户定制provider的信息.对Profile system而言,有2个文件值得阅读:
  《Introduction to Profile Providers》——它介绍了Profile system的概念以及职责;而《ASP.NET 2.0's Profile Providers》——它更
  直观的介绍了 in ASP.NET 2.0里的SqlProfileProvider是如何贯彻的.
  本文的剩下部分我们将探讨我们自定义的XmlProfileProvider——将用户信息装入App_Data文件夹里的一个XML文件,完整代码(以及简单的测
  试程序)在本文的下载代码里.
  设计XmlProfileProvider
  默认,Membership, Roles,Profile system的provider都被设计为多个应用程序存储信息.明显的例子就是aspnet_Applications表,每一个应用程序实例对应一条记录.系统里的每一个用户通过aspnet_Users表里的ApplicationId这个外键与某个应用程序联系起来.我决定将该功能应用到我们的profile provider里(对XmlProfileProvider来说,Membership 和 Roles providers都可以使用它).Profile数据默认时存储在App_Data文件夹里的一个文件里,以阻止用户从浏览器直接请求这些文件(如果一个用户试图从浏览器访问http://www.yoursite.com/App_Data/anyFile的话,ASP.NET会返回一个HTTP 404消息)。不过你也可以通过 provider的profileFolder设置来指定XML文件存放在什么地方.
  具体来说,Profile数据以如下形式进行存储:~/App_Data/XmlProfiles/applicationName/username.xml.每一个XML文件开始为一个 根元素,而子元素就由定义在Web.config文件里的Profile属性里决定了。
  就像在Part 6探讨了一样,Profile属性可以为strings, XML,或binary数据,对string类型的属性而言,XML文件将其保存为文本形式;如果是XML类型则原封不动的保存;如果是binary类型的就保存为64位编码的binary.假设我们在Web.config文件 元素里定义了6个Profile属性:
  
  
  ...
  
  
  
  
  
  
  
  
  
  
  其中的Address类型是定义在App_Code文件夹里的一个简单类,包含了些标量属性,比如:Address1, Address2, City等.注意:Profile属性BillingAddress序列化为XML,而ShippingAddress为binary.
  对于上面定义的Profile属性,如果有个叫"Jisun"的用户登录我们的网站,使用Profile system,且应用程序的名称为"MyApp",那么将会创建一个~/App_Data/XmlProfiles/MyApp/Jisun.xml的文件,其包含的代码可能为:
  
  
   False
   What is life, but a seemingly random collection of 1s and 0s?
   http://www.datawebcontrols.com
   1979-04-01
  
  
  
xmlns:xsd="http://www.w3.org/2001/XMLSchema">  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   123 Anywhere St.
  
   San Diego
   CA
   92109
  

  
  
  就像你看见的那样,每个Profile属性被处理成一个XML元素并作为 根元素的子元素. 对string类型的属性,比如IncludeSignatureInPosts, Signature, HomepageUrl,以及Birthdate,其值在XML元素里为文本值;对XML类型的属性(BillingAddress),其值在 元素里保存为原始形式;binary类型的属性ShippingAddress被编码为64位.
  规划XmlProfileProvider Class类
  当构建用户定制Profile provider时,我们要扩充System.Web.Profile.ProfileProvider class类.至少要包含2个方法——GetPropertyValues(context, collection) 和 SetPropertyValues(context, collection).这2个方法都接受2个输入参数——context 和 collection. 其中context提供的信息为:用户名以及该用户是否经过认证(ASP.NET支持匿名profile,不过这超出了本文的范围,更多信息请参阅文章《Profiles section on the ASP.NET Quickstarts 》(http://dotnetjunkies.com/QuickStartv20/aspnet/doc/profile/default.aspx#anon));另外collection提供一系列的Profile属性.
  上面的GetPropertyValues方法返回所需Profile属性的值,相反SetPropertyValues方法的目的是向backing store(就本例而言,为XML文件)写入属性值.在ProfileProvider class类里还有其它的类,不过我们可以创建仅仅执行这2个方法的自定义profile provider.
  在你的Website里使用XmlProfileProvider自定义Provider
  为了在你的应用程序里使用自定义的XmlProfileProvider,我们首先要在本文结尾处下载其代码,将CustomProviders.dll放在你的web 应用程序的/bin目录,再更新你的Web.config文件:
  
  
  
  
   type="CustomProviders.XmlProfileProvider, CustomProviders"
applicationName="applicationName"
[profileFolder="baseFolderPathForProfileXMLFiles"] />  type="CustomProviders.XmlProfileProvider, CustomProviders"
  applicationName="applicationName"
  [profileFolder="baseFolderPathForProfileXMLFiles"] />
  
  
  ...
  
  
  其中profileFolder属性是可选的,如果忽略的话,默认为~/App_Data/XmlProfiles/.
  下载代码里包含了一个测试的web应用程序,指导如何将自定义的XmlProfileProvider class类与默认的SqlMembershipProvider class类协调使用.
  结语:
  在本文我们看到如何利用provider model来创建以用户自定义的Profile provider,它将用户属性设置保存为XML文件而不是一个数据库.
  祝编程快乐!
  
  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1771993

本文转自
http://blog.csdn.net/heker2007/archive/2007/09/04/1771993.aspx
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值