在asp.net部署中缺少成员角色?

时间:2012-01-26 04:29:08

标签: c# asp.net windows-server-2003

我最近在生产服务器上部署了一个asp.net 3.5项目。它使用角色(.net成员资格)。网站有效(显示页面,我可以登录)。

虽然角色在数据库中,但它们不能在生产服务器上运行。

我试过这个:

string[] roles = Roles.GetAllRoles();

但它返回一个空字符串。

用户和角色与aspnet_Applications

中唯一的行相关
ApplicationName:/
LowerApplicationName:/
ApplicationId:5a354523-6cc2-40e7-be1e-d40f8e66a041

我认为它不起作用,因为我没有在Web.config中放置applicationName属性行

<membership defaultProvider="WAESMembershipProvider">
  <providers>
  <clear />
  <add name="MyMembershipProvider" 
             applicationName="/"
  ...
  </providers>
</membership>

添加applicationName属性

后仍无法正常工作

更新

情况组合

我需要在此处更改我的应用名称:

enter image description here

然后,编辑Web.xml,就像Muthu说的那样。

最后,我使用新的applicationName

删除并再次创建了成员资格表

2 个答案:

答案 0 :(得分:1)

我最近遇到了类似的问题。请检查以下内容:

  1. 数据库中创建的角色是否连接到生产服务器?
  2. 如果没有,请尝试使用生产服务器中的网站管理工具以正确创建角色。这是一篇非常好的文章:http://blogs.msdn.com/b/rahulso/archive/2006/03/09/how-to-use-web-site-administration-tool-without-installing-vs-2005.aspx
  3. 当我使用角色管理器时,我不得不在连接到生产服务器的数据库中重新创建架构。为此,您需要对machine.config进行一些更改。即:将 autogenerateschema =“true”添加到角色提供程序,并增加 trust level =“Full”
  4. 我不确定你的情况是什么,但我希望这会有所帮助。

答案 1 :(得分:1)

问题可能是因为

  • 您可能尚未复制/插入角色
  • 当您的应用程序名称为/时,您已复制/添加它们,因此您可能必须将角色的应用程序ID更改/更新为新的应用程序ID,或使用新的应用程序名称创建角色

    此外,我发现您尚未使用默认的成员资格或角色提供程序。如果您不使用任何自定义提供程序,请坚持使用提供程序的默认条目(更改应用程序名称除外)

    <membership>
      <providers>
       <clear/>
         <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
         enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
         maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
         applicationName="YourAppName" />
      </providers>
    </membership>
    
    <profile>
      <providers>
       <clear/>
       <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="YourAppName" />
      </providers>
     </profile>
    
    <roleManager enabled="false">
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="YourAppName" />
      </providers>
    </roleManager>