现象:
      在本地开发一个asp.net2.0的应用程序时使用了Membership、Roles特性。创建了一些新用户,在vs2005环境下运行程序,用户可以登录成功;
      然后把这个程序copy(或“生成网站”)到本地服务器上的其他目录,换在IIS下浏览,用户登录失败。提示错误:“尝试登陆失败,请重试”(Login attempt unsuccessful, please try again)原因:
查阅了一些文章,
         错误的原因据说是web.config文件membership的applicationName属性(attribute)设置问题。(详细解释见以下两篇文章)   1.《在配置使用Membership或其他的Providers的ASP.NET2.0时一定要设置applicationName属性http://lovewangshu.cnblogs.com/archive/2006/04/24/383513.html
  2. Always set the "applicationName" property when configuring ASP.NET 2.0 Membership and other Providers 问题:检查本机配置,未能解决,在IIS下浏览,用户登录仍然失败:
到底ApplicationName应该如何设置?能否给个具体例子?谢谢!本机配置如下:
1.ASPNETDB.MDF数据库ASPNET_Applications表的ApplicationName字段为"/"
2.应用程序下Web.Config未见对applicationname属性的设置。
3.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><roleManager>
      <providers>
        <add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <add name="AspNetWindowsTokenRoleProvider" applicationName="/" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      </providers>
    </roleManager>

解决方案 »

  1.   

    如果是系统自己的MemberShipProvider,肯定要提供ApplicationName,实际上只要是一个与众不同的字符串就可以了。
    如果自己实现,就可以不要它了。
    我就是自己实现的,不需要这个无聊的ApplicationName.
      

  2.   

    楼上的能说明白点么?这个ApplicationName具体应该设置为什么值?谢谢了。
      

  3.   

    不同的web程序通过applicationname把它们的权限用户信息分开,这个application可以在 web.config中设置,也可以在程序中指定,办法是继承默认的provider
      

  4.   

    具体点说吧。
    我的Web源程序放在D:\CatA目录下。网站发布到本地IIS,虚拟目录为localhost\CatB,对应的路径为c:\CatC。Web.config中的ApplicationName具体应该配为什么?我检查我的系统上只有manchine.config中有ApplicationName="/"的配置。
      

  5.   

    你不指定applicationname,它会根据你的虚拟目录自动为你指定applicationname,而在数据库中查找权限信息是根据applicationname来找的,你改变了目录当然找不到了,如果你指定了不变的applicationname,不管你把程序换到什么目录,都没问题,至于具体指定为什么值,随你,一般是"/"
      

  6.   

    未解决,有压力!
    我用“生成网站”,编译生成另一文件系统网站,然后在IIS下建立一虚拟目录指向新生成的文件系统网站,用户可以成功登录了!!而之前我用“生成网站”直接生成IIS网站就不行,看来并不是ApplicationName的问题。但是,当我在Window server2003(原来是在XP)上做同样事情时,仍然有“登录尝试不成功”,怎么回事?
      

  7.   

    是的,你一定要设置这个属性。
    在一个虚拟主机中,多个应用可以共享此provider,所以为了避免冲突,所以你一定要设置。