2013-04-04 67 views
2

我有一个使用成员资格功能的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”,但在这里没有成功(然后,该工具甚至没有找到用户)。

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

回答

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

不,我试过了,它不起作用。什么情况如下: - 我可以创建,然后将其添加到远程数据库 用户 - 我可以创造一个新角色(不添加到远程数据库,但在本地DB) - 我无法将角色分配给用户(提供用户未找到的错误)。所以基本问题似乎是该工具使用2个数据库;一个用于用户,另一个用于角色。 – Cleo 2013-04-05 10:31:40

+0

另外,在管理工具的“提供者”选项卡中没有列出任何提供者... – Cleo 2013-04-05 10:51:42

+0

您的两个'ConnectionStrings'不一样 - 一个显式定义数据库,一个不显示。 ***删除一个连接字符串***这是一条指令如何使用成员资格提供程序 - http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx – Win 2013-04-05 14:10:43

相关问题