2

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

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

我已经调查了这个问题,似乎角色被存储在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”,但在这里没有成功(然后,该工具甚至找不到用户)。

那么...有人知道我如何使该工具(和我的应用程序)为所有会员目的使用相同的远程数据库吗?

4

1 回答 1

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>
于 2013-04-04T19:38:22.807 回答