Asp.net网站管理工具使用错误的数据库

Asp.net网站管理工具使用错误的数据库,asp.net,asp.net-membership,Asp.net,Asp.net Membership,我有一个ASP.NETWebForms应用程序,它使用成员资格功能。 我已使用aspnet_regsql.exe工具在远程服务器上创建了所需的数据库。 现在,如果我使用网站管理工具来定义角色,我会经历以下事情: 我可以看到我通过编程创建的用户(Membership.CreateUser(…) 我可以定义新角色,并将它们存储在某个位置 我无法将用户分配给角色(错误:“未找到用户X”)。当我检查远程成员数据库时,roles表是空的 我已经调查了这个问题,似乎角色存储在App_Data文件夹中lo

我有一个ASP.NETWebForms应用程序,它使用成员资格功能。 我已使用aspnet_regsql.exe工具在远程服务器上创建了所需的数据库。 现在,如果我使用网站管理工具来定义角色,我会经历以下事情:

  • 我可以看到我通过编程创建的用户(Membership.CreateUser(…)
  • 我可以定义新角色,并将它们存储在某个位置
  • 我无法将用户分配给角色(错误:“未找到用户X”)。当我检查远程成员数据库时,roles表是空的
我已经调查了这个问题,似乎角色存储在App_Data文件夹中local机器上的*mdf数据库文件中。这可能是因为工具使用machine.config文件和web.config文件

我的web配置如下所示:

<connectionStrings>
<add name="userManagementConnectionString" connectionString="Data Source=myIp\SQLEXPRESS;Integrated Security=False;User ID=myUser;Password=myPW;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False"/>

<add name="securityConnectionString" connectionString="Data Source=myIp\SQLEXPRESS;Initial Catalog=IsapMemberShip;Integrated Security=False;User ID=myUser;Password=myPW;TrustServerCertificate=False" providerName="System.Data.SqlClient" />
</connectionStrings>

<profile defaultProvider="DefaultProfileProvider">
  <providers>
    <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="securityConnectionString" applicationName="/" />
  </providers>
</profile>


<membership defaultProvider="isapMembershipProvider">
  <providers>
    <add name="isapMembershipProvider"
    type="System.Web.Security.SqlMembershipProvider"
    connectionStringName="userManagementConnectionString" 
    ...      </providers>
</membership>


<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
  <providers>
    <add connectionStringName="securityConnectionString" applicationName="/"
      name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </providers>
</roleManager>


<sessionState mode="InProc" customProvider="DefaultSessionProvider">
  <providers>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="securityConnectionString" />
  </providers>
</sessionState>


您缺少匹配连接字符串

请注意,成员身份标记的
connectionStringName
userManagementConnectionString

如果您将其更改为
securityConnectionString
,它可能会解决您的问题-与profile、roleManager或sessionState相同。然后,您可以删除
userManagementConnectionString

<profile defaultProvider="DefaultProfileProvider">
  <providers>
    <add ...connectionStringName="securityConnectionString" 
       applicationName="/" />
  </providers>
</profile>

<membership defaultProvider="isapMembershipProvider">
  <providers>
    <add ... connectionStringName="userManagementConnectionString" ... />
  </providers>
</membership>

<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
  <providers>
    <add connectionStringName="securityConnectionString" 
       applicationName="/" .../>
  </providers>
</roleManager>

<sessionState mode="InProc" customProvider="DefaultSessionProvider">
  <providers>
    <add ... connectionStringName="securityConnectionString" />
  </providers>
</sessionState>


没有,我试过了,但没用。发生的情况如下:-我可以创建一个用户,然后将其添加到远程数据库-我可以创建一个新角色(该角色不是添加到远程数据库,而是添加到本地数据库)-我无法将角色分配给用户(给出一个找不到该用户的错误)。因此,基本问题似乎是该工具使用2个数据库;一个用于用户,一个用于角色。您的两个
连接字符串不相同-一个显式定义数据库,另一个不显式定义数据库。删除一个连接字符串。下面是如何使用成员资格提供程序的说明-我现在只使用securityConnectionString。我还使用regsql工具重新创建了数据库。尽管如此,我仍然可以创建用户和角色,但我无法链接它们。App_数据文件夹中的本地数据库仍在使用中。我还在每个add*标记之前都添加了一个标记。您没有按照Scott Hanselman的指示操作。
aspnet\u regsql
生成的成员资格已被弃用。谢谢,我终于让它工作了。使用1 connectionString有很大帮助。