ASPNET Identity 2.0 ROLES 在开发中起作用,但在生产中不起作用

ASPNET Identity 2.0 ROLES work in Development but not Production

我的开发系统(下方)上的一个应用程序 运行 成功地在应用程序内存在的 SQL Express DB 上实现了角色(从应用程序数据库外部移动)。非常直截了当的东西,幸运的是,因为我不是火箭科学家。在生产机器上,应用程序成功地与来自数据库的用户进行登录等通信(因此我们知道正在访问数据库),当然标准的数据库应用程序运行良好。当遇到 "role" 时出现问题,但仅限于生产机器。 App_Data 文件夹存在于开发机器和生产机器上,但除了日志文件和日志文件夹之外,其他任何一个都不存在数据。再次 - 它在开发机器上以这种方式工作正常。我在自定义应用程序池上搞砸了 LoadUser=True 但没有运气。 Read/Write 权限设置在 App_Data 文件夹上。

症状是应用程序在遇到角色测试时挂起(例如 User.IsInRole("Role…")并产生以下内容:

[SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)]

我不明白的是,在出现此错误时,应用程序已经与数据库成功通信 "ton"。

我整天都在做这个,只是不知道我错过了什么。  我 assuming/hoping 我能够使用当前存在的数据库标识文件。

我已经简要地查看了基于 SQL 的身份,但认为由于这是与用户登录一起使用的,所以它可能只是一个设置。我查看了 web.config 并没有看到任何关于角色的信息,这可能是我的问题 - 但我只是不知道从哪里开始。

我将继续进行研究和寻找答案,但非常感谢有人提供的任何指导。

开发系统:VS2015(VB)Win 8.1,DBSQLExpress

生产机器:WindowsServer 2008R2,DBSQLServer 2008R2

到目前为止,这些是我解决问题的发现。一些测试仍然是必需的,但我昨天在这上面花了足够长的时间,我认为它可能会早点帮助别人。

最终成功的原因有两点。首先,我将以下行添加到我的 Web.Release.config 文件中的位置:

<roleManager enabled ="true" defaultProvider ="SqlRoleProvider" dt:Transform="Insert">
   <providers>
    <add name ="SqlRoleProvider"
      type="System.Web.Security.SqlRoleProvider"
      connectionStringName="[add your connection string here to match your SQL db]"
      applicationName="[app name here = necessary??]"/>
  </providers>
</roleManager>

将它添加到那里而不是直接添加到我的 web.config 文件的原因是我的开发系统使用 SQL Express 而生产机器是 运行ning SQL 2008R2,所以只在生产机上需要,导致本机Debug出错。

第二件事是只在我的生产机器上 运行 aspnet_regsql.exe。有关更多详细信息和对此处年表的进一步了解,请参见下文。这两个步骤的组合使应用程序能够在生产机器上运行。

一点背景……aspnet_regsql.exe 位于 %windir%\Microsoft.NET\Framework64\v4.0.30319 目录中。它 运行 是交互式的。确保使用适合您特定需求的版本(Framework 或 Framework64)。这方面有很多 post。现在我之前在生产机器上有 运行 这个 – – 好消息是你可以 运行 它来安装它并再次 运行 它来删除它。当我第一次 运行 它时,它插入了一些表格,如下所示。

初步研究表明了这一点,但最初我 运行 在将其插入生产机器 web.config 文件之前,它没有起作用。当我检查 aspnet_Users 和 aspnet_Roles 表时,它们是空的,所以我认为它不起作用,然后我再次通过 运行ning aspnet_regsql.exe 将它们退出以删除他们。一直以来,我的开发机器 运行 都完美地启用了角色,但没有插入到 web.config 文件中,这在最初引起了一些混乱。然后我阅读了以下内容:

以下默认 roleManager 元素未在 Machine.config 文件或根 Web.config 文件中明确配置。但是,它是应用程序返回的默认配置。提供程序在 Machine.config 文件中明确配置。 有关 "remarks: default configuration" 下的 HERE 的更多信息。显然,这就是为什么开发框 运行 没有插入 web.config 行的原因。

如果找到可以进一步澄清这一点的内容,我会添加更多内容,但我希望这对某人有所帮助。非常感谢@StuartLC 在正确方向上的推动。

删除 aspnet_* 表残差后的最终编辑 所以老实说,我花了这么长时间才鼓起足够的勇气尝试删除剩余的 aspnet_* 表、视图、过程、模式和角色。值得庆幸的是,一位优秀的绅士在 HERE 之前经历过这个并且非常友好 post 它。令我惊讶的是,我设置了 SQL 查询,就像变魔术一样,它成功了!!所以现在我只剩下 AspNetRoles...AspNetUsers 表和没有 aspnet_*(下划线)表。