SqlMembershipProvider的配置

3.2  ASP.NET 2.0附带的提供程序

ASP.NET 2.0附带的几个特性实现并利用了提供程序模型的概念。大多数特性都实现了在数据库中提取和存储数据的功能。例如,MembershipProvider类建立了用于管理用户的契约。与其他几个提供程序一样,ASP.NET 2.0附带的控件使用在应用程序中配置的MembershipProvider。这些控件能工作的原因是,它们可以依赖已配置的提供程序,执行在MembershipProvider上定义的一组固定方法。

与ProviderBase一样,MembershipProvider类也是一个抽象类,仅为成员管理提供了契约或方法/属性定义。为了使它可用,ASP.NET小组提供了SqlMembershipProvider,它继承自MembershipProvider,提供了MembershipProvider契约的具体实现方式。在下面的例子中,ASP.NET使用web.config或machine.config中的配置信息,确定哪个MembershipProvider是激活的,以标识和加载相应的提供程序。如果查看machine.config文件,搜索membership,就会找到MembershipProvider的默认配置。下面的示例是MemberShipProvider的machine.config文件的默认内容:

<system.web>

 <membership>

  <providers>

        <add name="AspNetSqlMembershipProvider"

type="System.Web.Security.SqlMembershipProvider, System.Web,

Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

connectionStringName="LocalSqlServer" enablePasswordRetrieval="false"

enablePasswordReset="true" requiresQuestionAndAnswer="true"

applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed"

maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7"

minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10"

passwordStrengthRegularExpression="" />

  </providers>

 </membership>

</system.web>

这个配置项告诉ASP.NET有一个 SqlMembershipProvider类,并把各种设置传送给提供程序,以控制提供程序的操作方式。该例子的目的不是研究传送给提供程序的各个参数,而是揭密成员提供程序如何使用默认的安装。这些参数都可以在应用程序的本地web.config文件中修改,MSDN文档提供了其可能设置的详细信息。本章的后面将讨论在建立自己的提供程序时,如何访问这些设置。

在其他内置提供程序模型的machine.config文件中,也有类似的配置项,它们由ASP.NET中的特性支持。

表3-2列出了ASP.NET的内置提供程序模型的特性及其实现方式。

表  3-2

提供程序的类型

说    明

Membership

管理用户,在System.Web.Security命名空间中有两个提供程序:SqlMembershipProvider和ActiveDirectoryMembershipProvider

Role

管理与用户相关的角色,在System.Web.Security命名空间中有三个内置的提供程序: AuthorizationStoreRoleProvider、SqlRoleProvider和WindowsTokenRoleProvider

Site Map

用于填充站点地图控件,只有一个内置的提供程序:System.Web. XmlSiteMapProvider

Session State

可以管理站点用户的会话状态—— 提供程序匹配和提供的功能类似于ASP.NET 1.1。但是,现在用户可以扩展它,或用自己的会话状态提供程序来替代它。会话状态提供程序位于System.Web.SessionState命名空间中,InProcSessionStateStore、OutOfProcSessionStateStore和SqlSessionStateStore实现了会话状态提供程序

Profile

System.Web.Profile.SqlProfileProvider 提供了一种SQL Server实现方式,来存储用户配置项。将来的配置提供程序可以把正常的数据库表映射为配置项

Web Event

Web事件提供程序可以扩展或发布Web事件,它位于System.Web. Management命名空间。下面是内置的提供程序: EventLogWebEventProvider、SimpleMailWebEventProvider、TemplateMailWebEventProvider、SqlWebEventProvider、TraceWebEventProvider和WmiWebEventProvider

Web Part
Personalization

为Web part保存位置和其他个性化选项,Web part位于System.Web. UI.WebControls.WebParts命名空间,SqlPersonalizationProvider是其唯一的内置提供程序

Protected Configuration

在应用程序配置文件中提供各个配置段的保护,有两个内置的提供程序: DPAPIProtectedConfigurationProvider和RSAProtectedConfigurationProvider

在开始讨论如何建立自己的提供程序,扩展内置的提供程序之前,先考虑一个比较常见的问题:如何让应用程序不使用本地的SQLExpress实例?在前面的MembershipProvider配置示例中,连接字符串LocalSqlServer有一项。快速扫描machine.config文件,也可以看到其定义,如下所示:

<connectionStrings>

    <add name="LocalSqlServer" connectionString="data

source=.\SQLEXPRESS;Integrated
           Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User

Instance=true"

           providerName="System.Data.SqlClient" />

 </connectionStrings>

注意,这会影响ASP.NET附带的提供程序的所有SQL Server实现方式,所以改变它,会改变使用SQL Server版本的所有提供程序,除非修改它们的配置段,指定另一个connectionStringName。

如果要指定另一个SQL Server实例,只需清除现有的连接,或删除它,再添加自己的连接,如下所示:

<connectionStrings>

    <clear/>

    <add name="LocalSqlServer" connectionString="Data

Source=ctcdev2;Initial Catalog=MyDB;Integrated Security=True”

providerName="System.Data.SqlClient" />

</connectionStrings>

要完成的另一个工作是对已有的数据库使用内置的提供程序。在.NET Framework 2.0的安装目录中有一个实用程序aspnet_regsql.exe,它会建立必要的数据库表和存储过程,来支持所有提供程序的内置SQL版本。

posted @ 2008-02-13 10:11  指南针  阅读(5050)  评论(0编辑  收藏  举报