1

我正在我的 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_ 表:

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

最后,当我单击安全性时,这是我收到的消息(请记住,我从连接字符串中删除了 LocalSqlServer):

在此处输入图像描述

任何想法我做错了什么?

更新

这是我的 web.config 的 Membership、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

4 回答 4

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>
于 2013-05-29T11:26:57.337 回答
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>
于 2013-04-05T02:22:49.027 回答
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" ...
于 2013-04-04T21:39:13.087 回答
0

事实证明,我的用户/角色/等实际上一直被插入到正确的数据库中——它们被插入到用户表中,而不是我所期望的 aspnet_Users 表中。这是因为我的应用程序被配置为使用 asp.net 通用提供程序。

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

于 2013-04-05T02:22:35.743 回答