ASP.NET成员资格之谜

ASP.NET成员资格之谜,asp.net,asp.net-membership,Asp.net,Asp.net Membership,因此,我正在使用内置的成员资格提供程序将应用程序从集成安全转换为表单身份验证,并具有最奇怪的行为。最初,我使用默认的sqlexpress配置,它在App_数据文件夹中创建一个aspnetdb.mdf文件 但是,我想将其移动到我的SQL Server,并通过在SQL Server数据库中创建过程和表来实现,并将我的提供者指向该数据库。然而,当我运行Web站点管理工具时,它不会查看SQL Server 它一直在创建并使用aspnetdb.mdf文件,即使我的应用程序似乎正确地访问了SQL数据库。最后

因此,我正在使用内置的成员资格提供程序将应用程序从集成安全转换为表单身份验证,并具有最奇怪的行为。最初,我使用默认的sqlexpress配置,它在App_数据文件夹中创建一个aspnetdb.mdf文件

但是,我想将其移动到我的SQL Server,并通过在SQL Server数据库中创建过程和表来实现,并将我的提供者指向该数据库。然而,当我运行Web站点管理工具时,它不会查看SQL Server

它一直在创建并使用aspnetdb.mdf文件,即使我的应用程序似乎正确地访问了SQL数据库。最后,我关闭了SQLEXPRESS服务,现在是真正奇怪的地方

登录工作正常-
Membership.Provider.ValidateUser(LoginUser.UserName,LoginUser.Password)
返回true。但是,当发出
IsInRole
调用时,它会在连接到数据库失败时超时。显然,它正在尝试连接到SQLEXPRESS数据库。我已重新启动IIS,重新启动数据库服务无效

这不是告诉会员服务要访问哪个数据库的正确位置:

<connectionStrings> 
    <add name="MyConnection" connectionString="user id=myuser;password=mypassword;data source=SERVER\INSTANCE;initial catalog=mycatalog;"/>
</connectionStrings>

<system.web>
    <authentication mode="Forms">
        <forms name="formsauth" protection="None" path="/" loginUrl="~/Account/Login.aspx" cookieless="UseCookies"/>
    </authentication>
    <roleManager enabled="true" />
    <membership>
        <providers>
            <remove name="AspNetSqlMembershipProvider"/>
            <add name="AspNetSqlMembershipProvider" 
     type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
     connectionStringName="MyConnection" 
     enablePasswordRetrieval="false" 
     enablePasswordReset="true" 
     requiresQuestionAndAnswer="false" 
     applicationName="/MyApp" 
     requiresUniqueEmail="false" 
     minRequiredPasswordLength="6" 
     minRequiredNonalphanumericCharacters="0" 
     passwordFormat="Hashed" 
     maxInvalidPasswordAttempts="5" 
     passwordAttemptWindow="10" 
     passwordStrengthRegularExpression=""
     />
        </providers>

首先,创建
aspnetdb.mdf
的原因是因为您使用的是ASP.NET配置工具。它仅适用于SQL Express实例。它不能在成熟的SQL Server上使用。为此,您需要在自己的应用程序中重新创建管理面板

如果希望在本地SQL Server下使用角色,则需要将web.config配置为指向角色提供程序的SQL Server。默认情况下,它指向成员资格提供程序也指向的
aspnetdb.mdf
文件

例如:

<system.web>
    <roleManager defaultProvider="SqlRoleProvider" enabled="true">
      <providers>
        <clear />
        <add name="SqlRoleProvider"
             type="System.Web.Security.SqlRoleProvider"
             connectionStringName="MyConnection"/> <!--- Point this to your sql server -->
      </providers>
    </roleManager>
</system.web>


首先,创建
aspnetdb.mdf
的原因是因为您使用的是ASP.NET配置工具。它仅适用于SQL Express实例。它不能在成熟的SQL Server上使用。为此,您需要在自己的应用程序中重新创建管理面板

如果希望在本地SQL Server下使用角色,则需要将web.config配置为指向角色提供程序的SQL Server。默认情况下,它指向成员资格提供程序也指向的
aspnetdb.mdf
文件

例如:

<system.web>
    <roleManager defaultProvider="SqlRoleProvider" enabled="true">
      <providers>
        <clear />
        <add name="SqlRoleProvider"
             type="System.Web.Security.SqlRoleProvider"
             connectionStringName="MyConnection"/> <!--- Point this to your sql server -->
      </providers>
    </roleManager>
</system.web>


谢谢-我想我一直认为配置工具足够智能,可以选择配置设置。我真傻。不管怎样,这就成功了!谢谢-我想我一直认为配置工具足够聪明,可以选择配置设置。我真傻。不管怎样,这就成功了!