【问题标题】:ASP.NET Configuration Website For Membership - database setup (aspnet_ tables) - having problems pointing to the right databaseASP.NET 会员配置网站 - 数据库设置(aspnet_ 表) - 指向正确的数据库时出现问题
【发布时间】:2013-04-04 21:29:44
【问题描述】:

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

【问题讨论】:

  • 我建议看看this 线程,看看它是否有帮助。
  • 不,这不起作用...我的意思是,删除 LocalSqlServer 并将我的连接字符串重命名为 LocalSqlServer 允许数据库连接成功发生,但现在我不知道我的用户存储在哪里,因为它不在我想要的数据库中。
  • 你能发布web.config的membership、roleManager、profile和sessionState(如果有的话)标签吗?
  • 我在最后用您要求的信息更新了我的问题,@Win
  • 当我单击安全选项卡时,我收到消息“在应用程序配置中找不到连接名称 'LocalSqlServer' 或连接字符串为空。(C:\Windows\Microsoft.NET \Framework\v4.0.30319\Config\machine.config 行 251)"

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


【解决方案1】:

在您的 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>

【讨论】:

    【解决方案2】:

    您不需要删除 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)。

    将&lt;clear/&gt; 放在标签内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>
    

    【讨论】:

    • 您说的是表用户、角色、应用程序等,对吗?与 aspnet_ 表相反?
    • 是的。 aspnet_XXX 已弃用。
    • 由新的 ASP.Net 通用提供程序创建的表没有 aspnet_ 前缀。
    • 您不需要 sessionState,因为它是默认的 InProc。
    • 这只是一个安全网。您不必使用它。
    【解决方案3】:

    您的 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" ...
    

    【讨论】:

    • “上传的配置文件”是什么意思?我现在在本地运行它,指向我的 web.config 中的一个非本地数据库。
    • 这是我的提供者的样子:
    • 我明白了。你有构建配置/配置转换吗?
    • 是的,这没有帮助..它只是清除了从 machine.config 继承的设置。
    • 该死的。这是困难的一个。抱歉,到目前为止我无法提供帮助。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-17
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多