您的位置:首页 > 编程语言 > ASP

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

2007-11-20 21:58 495 查看
导读:
  本文英文原版及代码下载:
  http://aspnet.4guysfromrolla.com/articles/010307-1.aspx
  考察ASP.NET 2.0的Membership, Roles,Profile - Part 8
  导言:
  我最近遇到一个网站,其主要包含一些静态的内容.在客户端,需要一个页面来从一个数据库表里显示数据.另外,还需要一个页面来便于管理员添加、更新、删除数据.用ASP.NET 2.0的数据源控件以及Membership system,该功能可以很容易的实现。不过有一个问题,由于服务器不支持SQL Server数据库,只有用Access数据库来代替。问题来了,.NET Framework BCL只包含了一个支持Microsoft SQL Server数据库的Membership provider.
  可喜的是,微软提供了一个Access数据库模板及在Membership, Roles,Profile里使用Access数据库的provider.在本文我们将探讨如何得到这些基于Access的provider以及如何在ASP.NET 2.0 web应用里使用它们.获取并使用Access Provider
  在ASP.NET 2.0的Beta版本里,微软为Membership, Roles, Profile设计的基于Access和SQL Server数据库的provider,并作为基本类库的一部分包含在.NET Framework里.到ASP.NET 2.0 正式发行的时候,微软决定剔除内置的对Access数据库的支持,而只支持Microsoft SQL Server 2005 Express Edition版本数据库.但是不见得所有人都转移到SQL Server 2005.很多web服务器公司就不支持Express Edition.其它人可能在此之前设计的是基于Access数据库的应用程序并使用的很好,要转变到SQL Server的话可能困难重重.
  还好,我们可以从微软单独下载到Access providers,其为一个Microsoft Visual Studio安装文件(VSI),包含了C# class类文件以及一个Access数据库.你可以在这里:http://download.microsoft.com/download/5/5/b/55bc291f-4316-4fd7-9269-dbf9edbaada8/SampleAccessProviders.vsi进行下载,当然在本文的下载文件里也包含它.
  我们必须采取以下3个步骤才能使用Access providers:
  1.将Access Provider Classes类应用到Web Application——下载内容里的C# class类文件要么被编译为一个文件并放到web应用程序的/bin目录文件夹里,要么将这些类文件拷贝到App_Code文件夹.
  2.准备好数据库——确保应用程序里有一个Access数据库.
  3.更新Web.config文件—必须对Web.config文件进行设置以使应用程序为Membership, Roles,Profile调用Access providers而不是默认的SQL Server providers.
  第一步:将Access Provider Classes类应用到Web Application
  下载完该VSI文件后,双击以进行安装过程,这将把文件安装到恰当的文件夹(就我的电脑而言:My Documents/Visual Studio 2005/Templates/ProjectTemplates/Visual Web Developer/Starter Kits).在“New Projects”对话框里可以找到一个模板,如下面的截屏所示:
  


  
  图1
  创建一个新工程,用该ASP.NET Access Providers模板创建一个Class Library对象.在此,最理想的是将Class Library对象进行编译得到一个文件,比如AccessProviders.dll.再将其拷贝到应用程序的/bin目录下,这将允许你为Membership, Roles, Profile调用Access provider. 这是最理想的方法因此它便于部署和维护.
  另外,你还可以将模板使用的C# class类文件拷贝到应用程序的App_Code文件夹里.最简单的方法是从下载的VSI文件里将其抽出来,在安装向导的第一步里,选择"View files in Windows Explorer",该VSI文件包含一个ZIP压缩文件(ASP.NET Access Providers.zip),在它的Samples目录下包含了必需的类.将这些类拷贝进App_Code文件夹.
  


  
  图2
  第二步:准备好数据库
  该VSI文件包含了一个Microsoft Access数据库(ASPNetDB.mdb),其包含了必需的表和视图.我们要将该数据库放在我们的应用程序里。我们可以在Windows资源管理器里查找到VSI里包含的Access数据库;或者安装完VSI后,我们也可以在硬盘里找到该数据库.不管是哪种方式,你都要将这个ASPNetDB.mdb数据库拷贝到App_Data文件夹.确保该文件没有标明为只读,这样那些用户帐户才有对App_Data文件夹的读写权限.
  第三步:更新Web.config文件
  最后我们要更新Web.config文件,以使Membership, Roles,Profile使用基于Access的provider而不是默认的基于SQL Server的provider.我们也需要在节点引用该Access数据库的路径.
  首先添加新的,假定你的数据库还是ASPNetDB.mdb且放在App_Data文件夹里,你可以使用如下的代码:
  
  
  providerName="System.Data.OleDb"/>  providerName="System.Data.OleDb"/>
  
  
  ...
  
  
  接下来在元素,添加必要的Membership, Roles,Profile元素.下面的声明清除了默认的Membership provider设置,而将AccessMembershipProvider作为应用程序默认的Membership provider:
  
  
  providerName="System.Data.OleDb"/>  providerName="System.Data.OleDb"/>
  
  
  
  

  
   type="Samples.AccessProviders.AccessMembershipProvider, AssemblyName"
connectionStringName="LocalAccessDatabase"
enablePasswordRetrieval="false"
enablePasswordReset="false"
requiresUniqueEmail="false"
requiresQuestionAndAnswer="false"
minRequiredPasswordLength="1"
minRequiredNonalphanumericCharacters="0"
applicationName="SampleSite"
hashAlgorithmType="SHA1"
passwordFormat="Hashed"/>  type="Samples.AccessProviders.AccessMembershipProvider, AssemblyName"
  connectionStringName="LocalAccessDatabase"
  enablePasswordRetrieval="false"
  enablePasswordReset="false"
  requiresUniqueEmail="false"
  requiresQuestionAndAnswer="false"
  minRequiredPasswordLength="1"
  minRequiredNonalphanumericCharacters="0"
  applicationName="SampleSite"
  hashAlgorithmType="SHA1"
  passwordFormat="Hashed"/>
  
  
  
  
  我们注意到节点用到的name与元素里的connectionStringName属性的值一样(都是LocalAccessDatabase).如果你将类编译成一个文件并拷贝到/bin目录的话,type应该使用"Samples.AccessProviders.AccessMembershipProvider, AssemblyName";而如果你将类文件拷贝到App_Code文件夹的话,type应该使用 "Samples.AccessProviders.AccessMembershipProvider".
  一旦完成上面3个步骤后,你就按同一种方式来使用Membership, Roles, Profile system就像是在使用默认的基于SQL Server的provider一样(也不完全正确,见如下的警告以及VSI里的README文件)。这意味着你可以使用Security Web控件——Login, LoginView, CreateUserWizard等.本文下载代码里包含了一个简单的website,它的Membership 和 Roles功能调用的是Access providers.
  关于使用Access-based Providers的警告
  VSI里的README文件指出了使用Access Membership provider的缺点,我这里再次重申:
  1——在CreateUser 和 ChangePassword方法里并没有强制性的对密码长 度做出要求,该设置可以进行读取但不能被provider使用.
  2——不能在provider里执行帐户锁定,自然,UnlockUser方法也无效.同 时不能阻止带有恶意的password 或password answer的企图.
  3——不支持创建带有一个明显UserId(比如providerUserKey)的新用户
  4——不支持创建检索一个基于UserId(比如providerUserKey)的用户
  参见README文件以获取更多的信息
  结语:
  本文我们考察了适用于Membership, Roles,Profile的Access providers,它允许开发者使用一个Access数据库来作为Membership, Roles, 以及 Profile systems的存储备份(backing store)
  祝编程快乐!
  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1773074
本文转自
http://blog.csdn.net/heker2007/archive/2007/09/05/1773074.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息