今天照着《asp.net2.0揭秘》上做了一个LoginView控件的Demo,其中涉及到MemberShip角色与权限的管理。
本以为按部就班地做,应该没什么问题,没想到在浏览器中查看时报错。
心里还纳闷着呢,我并没有涉及与数据库的连接啊,我的用户均是在Page_Load方法中,用硬编码创建的。之后,查看了一下SQL Server2005的外围配置,也没看出个所以然。这时,我才意识到,这是MemberShip机制的问题。
MemberShip将用户信息(用户名、密码、电子邮件地址及支持数据)存储在 Microsoft SQL Server 或其他类似的数据存储区。一般情况下,如果没有在Web.config中进行特别配置,默认用户信息提供程序为 SqlMembershipProvider 并在计算机配置中以名称 AspNetSqlProvider 指定。SqlMembershipProvider 的默认实例配置为连接到 Microsoft SQL Server 的一个本地实例。
于是,我在Web.config中配置了一个ConnectionString,可结果依旧是Error~
无语了片刻之后,瞄到了MemberShip角色与权限管理的配置方法,照做,立马Ok~ 这下,我又无语了,因为配置的过程不仅是修改Web.config配置文件,还要为MemberShip角色管理专门创建一个数据库,并运行Framework平台下的aspnet_regsql.exe程序,为该数据库创建membership应用所需的表和存储过程……
之后,直接用MemberShip.Create方法就可新建用户,很方便,很高效。但是,我却感觉自己被MemberShip耍了一下午……
解决方案(Web.config配置):
1.<connectionStrings>
<add name="wztPlayConnectionString" connectionString="Data Source=WWW-955D12A1603\WZT2009;Initial Catalog=membershipDemo;Persist Security Info=True;User ID=sa;Password=Pass@word" providerName="System.Data.SqlClient"/>
</connectionStrings>
2.在<system.web>节中,添加:
<!-- 参照 http://www.blueidea.com/tech/program/2007/4676_2.asp中配置 OK!-->
<membership defaultProvider="AspNetSqlMembershipProvider" userIsOnlineTimeWindow="15" hashAlgorithmType="">
<providers>
<clear/>
<add connectionStringName="wztPlayConnectionString" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</membership>
<roleManager enabled="true" cacheRolesInCookie="true">
<providers>
<clear/>
<add connectionStringName="wztPlayConnectionString" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>
<!-- 《揭秘asp.net2.0》中的配置,依然出错!
<authentication mode="Forms"/>
<roleManager enabled="true "/>
-->
注:在修改Web.config之前,要在sql server2005中建立一个空数据库:membershipdemo。建立membershipdemo后,运行aspnet_regsql.exe(C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727),指定membership为membershipdemo。