我有一个使用成员资格功能的ASP.Net网络表单应用程序。 我使用远程服务器上的aspnet_regsql.exe工具创建了所需的数据库。 现在,如果我使用Web站点管理工具来定义角色,我遇到以下的事情:Asp.net网站管理工具使用错误的数据库
- 我可以看到我已经创建编程(Membership.CreateUser(...))
- 用户我可以定义新角色,并将它们存储在某处
- 我无法将用户分配给角色(错误:“找不到用户X”)。当我检查远程成员数据库时,角色表是空的。
我已经调查这个问题,似乎角色被存储在App_Data文件夹中的本地机器上的* 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>
U可以看到,我使用的是2个不同的连接字符串(一个用于用户存储,一个为休息)。但是,两者都指向同一台服务器上的同一个数据库。 我也试过只使用“securityConnectionString”,但在这里没有成功(然后,该工具甚至没有找到用户)。
那么......有没有人知道我该如何让该工具(和我的应用程序)为所有成员目的使用相同的远程数据库?
不,我试过了,它不起作用。什么情况如下: - 我可以创建,然后将其添加到远程数据库 用户 - 我可以创造一个新角色(不添加到远程数据库,但在本地DB) - 我无法将角色分配给用户(提供用户未找到的错误)。所以基本问题似乎是该工具使用2个数据库;一个用于用户,另一个用于角色。 – Cleo 2013-04-05 10:31:40
另外,在管理工具的“提供者”选项卡中没有列出任何提供者... – Cleo 2013-04-05 10:51:42
您的两个'ConnectionStrings'不一样 - 一个显式定义数据库,一个不显示。 ***删除一个连接字符串***这是一条指令如何使用成员资格提供程序 - http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx – Win 2013-04-05 14:10:43