ASP.NET配置网站的成员资格 - 数据库设置(aspnet_表) - 指向正确的数据库时遇到问题

时间:2013-04-04 21:29:44

标签: asp.net-mvc asp.net-mvc-4 asp.net-membership membership

我正在设置ASP.NET MVC4应用程序的成员资格,所以我打开解决方案然后从那里打开“项目”菜单下的ASP.NET配置网站选项。这将打开ASP.NET配置工具来创建/修改/删除用户。我发现当我创建一个用户时,它会在我专门设置web.config指向我的网络托管公司托管的不同数据库时,在本地数据库中创建用户。我把<remove name="LocalSqlServer" />删除了在machine.config中定义的连接。

这是我的应用程序的web.config中的连接字符串:

<remove name="LocalSqlServer" />
<add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=cp.speedwell.arvixe.com; Initial Catalog=*********; User ID=********; Password=********;" />

这是我的网络托管公司的数据库结构。如您所见,我已经创建了所有aspnet_表:

enter image description here

当我在ASP.NET配置选项卡中单击“提供者”时,这是我的提供者列表:

enter image description here

DefaultMembershipProvider指向“DefaultConnection”,它是与我的Web托管公司托管的数据库的连接字符串。当我点击“测试”时,它会立即回来说:

enter image description here

最后,当我点击Security时,这是我得到的消息(请记住我从连接字符串中删除了LocalSqlServer):

enter image description here

任何想法我做错了什么?

更新

以下是我的web.config的,Profile,RoleManager和SessionState部分:

<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="DefaultConnection" applicationName="/" />
  </providers>
</profile>
<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add connectionStringName="DefaultConnection" enablePasswordRetrieval="false"
      enablePasswordReset="true" requiresQuestionAndAnswer="false"
      requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6"
      minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
      applicationName="/" name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </providers>
</membership>
<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
  <providers>
    <add connectionStringName="DefaultConnection" 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="DefaultConnection" />
  </providers>
</sessionState>

4 个答案:

答案 0 :(得分:2)

在你的Web.config中, 只需替换它,

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>

有了这个,

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>

答案 1 :(得分:1)

您无需删除 LocalSqlServer ,而是需要删除 DefaultConnection

<remove name="DefaultConnection" />
<add name="DefaultConnection" providerName="System.Data.SqlClient" .../>

此外,如果您使用新的ASP.Net Universal Providers,则无需使用aspnet_regsql.exe生成已弃用的表。

ASP.Net Universal Providers使用实体框架。

如果您的数据库是新的(没有现有数据),我的建议是删除该数据库并使用ASP.Net Universal Providers创建表(不需要使用aspnet_regsql.exe)。

<clear/>放在add之前的标记内。

<profile defaultProvider="DefaultProfileProvider">
  <providers>
    <clear/>
    <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</profile>
<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <clear/>
    <add connectionStringName="DefaultConnection" enablePasswordRetrieval="false"
      enablePasswordReset="true" requiresQuestionAndAnswer="false"
      requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6"
      minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
      applicationName="/" name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </providers>
</membership>
<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
  <providers>
    <clear/>
    <add connectionStringName="DefaultConnection" 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>
    <clear/>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
  </providers>
</sessionState>

答案 2 :(得分:0)

您的web.config是否通过connectionStringName指向该连接字符串以获取成员身份,如下所示:

<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="NameOfConnectionString" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />

或者您是否可以构建配置问题?您是否确认上传的配置文件指向正确的位置?

在尝试注册会员资格之前,请尝试添加明文:

<membership defaultProvider="DefaultMembershipProvider">
<providers>
 <clear />    
<add name="DefaultMembershipProvider" ...

答案 3 :(得分:0)

事实证明,我的Users / Roles / Etc实际上一直被插入到正确的数据库中 - 它们被插入到Users表中,而不是像我期望的那样插入到aspnet_Users表中。这是因为我的应用程序配置为使用asp.net通用提供程序。

由于我正在使用MYWSAT,并且它需要旧的aspnet表,我删除了通用提供程序,现在它已经解决了这个问题。我得到该消息的原因是它无法建立与数据库的连接正是因为这一点。

相关问题