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

时间:2013-04-04 15:15:18

标签: asp.net asp.net-membership

我有一个使用会员功能的ASP.Net网络表单应用程序。 我使用远程服务器上的aspnet_regsql.exe工具创建了所需的数据库。 现在,如果我使用网站管理工具来定义角色,我会遇到以下情况:

  • 我可以看到我以编程方式创建的用户(Membership.CreateUser(...))
  • 我可以定义新角色并将它们存储在某个地方
  • 我无法将用户分配给某个角色(错误:“找不到用户X”)。当我检查远程成员资格数据库时,roles-table为空。

我调查了这个问题,似乎这些角色存储在App_Data文件夹中本地机器上的* mdf数据库文件中。这可能是因为该工具使用machine.config文件和web.config文件。

我的网页配置如下:

<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>

你可以看到我正在使用2个不同的连接字符串(一个用于用户存储,一个用于其余)。但是,它们都指向同一服务器上的同一数据库。 我也尝试过只使用“securityConnectionString”,但这里没有成功(那时,该工具甚至找不到用户)。

所以...有没有人知道如何让这个工具(和我的应用程序)使用相同的远程数据库用于所有会员目的?

1 个答案:

答案 0 :(得分:0)

您错过了匹配连接字符串。

请注意,会员标记的connectionStringNameuserManagementConnectionString

它可能会解决您的问题,如果您将其更改为securityConnectionString - 与配置文件相同,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>