asp.net2.0内建角色成员机制使用中的若干问题(如果以后类似问题将在此持续更新)

自从上次初试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.csdn.net/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文件里默认有如下代码:
 void Application_Start(object sender, EventArgs e) {
  SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(AppendQueryString);
  if (!Roles.RoleExists("Administrators")) Roles.CreateRole("Administrators");
  if (!Roles.RoleExists("Friends")) Roles.CreateRole("Friends");
 }

不用多说了吧,呵呵。。。。

阅读更多
换一批

没有更多推荐了,返回首页