自从上次初试asp.net2.0后,陆续遇到新的“问题”。慢慢积累吧。。。
在项目中通过Web Site Admin Tool工具(菜单website--〉asp.net configuration)新建用户和角色,随便建了几个,在sql2k5里此项目的数据库中什么都用户、角色都没有。奇怪了,项目数据库名为morning2,已经通过aspnet_regsql.exe命令初始化了表结构了阿。往其他库里找,发现新加的用户和角色都在aspnetdb里,而aspnetdb是以前运行aspnet_regsql.exe默认生成的数据库。why???
上次为了成功运行Personal starter kit建站,将machine.config中的连接字符串改了。详见前文 http://blog.youkuaiyun.com/quou2002/archive/2005/12/21/558494.aspx
再看此项目中的web.config文件,连接字符串为
<connectionStrings>
<add name="Personal" connectionString="Data Source=.;Integrated Security=True;Initial Catalog=Morning2" providerName="System.Data.SqlClient"/>
</connectionStrings>
是啊!!!人家微软为什么要使用你定的名字---“Personal”呢??
再想想上次的修改,难道是。。。。马上把web.config里的连接字符串改为:
<connectionStrings>
<add name="Personal" connectionString="Data Source=.;Integrated Security=True;Initial Catalog=Morning2" providerName="System.Data.SqlClient"/>
<remove name="LocalSqlServer"/>
<add name="LocalSqlServer" connectionString="Data Source=.;Integrated Security=True;Initial Catalog=Morning2" providerName="System.Data.SqlClient"/>
</connectionStrings>
---ok。。。
看来asp.net2.0中的角色成员管理,调用的连接字符串默认名必须为LocalSqlServer,如果web.config里没有定义,它会自动到machine.config里找,而在machine.config里有其默认值,上次我正是将其对应的数据库名改为默认名aspnetdb导致它把新加的用户加到了aspnetdb里。
看来用人家的东西,就是“手软”啊!!!
-------续:
上次说到,连接字符串默认名必须是LocalSqlServer,原因是在machine.config里,关键是如下节:
<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>
看见高亮部分没,如果你自己的web.config里没有单独设定(覆盖)此节信息,那么成员服务就从这里找设置了。我们可以在不同项目里单独通过设定web.config来覆盖它的默认设定。还有,看见上面成员服务里其他的一些属性设定没?都可以如此这般。。。<呵呵,以前有人问:为什么我用Membership.CreateUser(userName, pwd)来建个用户会报错? 看见默认设定没---requiresQuestionAndAnswer="true",这就是原因了>
---------续:
| 为什么有时自动多出了Administrators和Friends两个角色? |
有时莫名其妙出现上述问题,找了下msdn,找到了答案: 原来我的这个项目是从Personal starter kit模版继承过来的,它的Global.asax文件里默认有如下代码: 不用多说了吧,呵呵。。。。 |
博主在使用ASP.NET 2.0进行项目开发时,通过Web Site Admin Tool新建用户和角色,发现新用户和角色未存入项目数据库,而是存入了默认的aspnetdb。经排查,原来是连接字符串默认名必须为LocalSqlServer,若web.config未定义,会到machine.config里找默认值。还介绍了可通过web.config覆盖默认设定。
416

被折叠的 条评论
为什么被折叠?



