ASPNET Identity 2.0 ROLES在开发中工作但不在生产中

时间:2015-08-05 02:22:13

标签: sql-server vb.net visual-studio-2015 asp.net-identity-2

在我的开发系统(下面)上运行的应用程序成功实现了应用程序中存在的SQL Express DB上的角色(从app db外部移动)。幸运的是,相当直接的东西,因为我不是火箭科学家。在生产机器上,应用程序成功地与数据库中的用户通信以进行登录等(因此我们知道数据库正在被访问),当然标准数据库应用程序的功能也很好。遇到“角色”时会出现问题,但仅限于生产机器上。开源和生产计算机上都存在App_Data文件夹,但除了日志文件和日志文件夹之外,不存在任何数据。再次 - 它在开发机器上以这种方式正常工作。我在自定义应用程序池上搞乱了LoadUser = True,但没有运气。读/写权限在App_Data文件夹中设置。

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

  

[SqlException(0x80131904):与网络相关或特定于实例的   建立与SQL Server的连接时发生错误。该   服务器未找到或无法访问。验证该实例   名称是正确的,并且SQL Server配置为允许远程   连接。 (提供者:SQL网络接口,错误:26 - 错误   找到指定的服务器/实例)]

我没有得到的是,在此错误时,应用程序已成功与DB通信了“ton”。

我整天都在这里,只是不知道我错过了什么。 我假设/希望我能够使用当前存在的DB Identity文件。

enter image description here

我简要地看了一下基于SQL的身份,但发现由于这与用户登录有关,可能只是一个设置。我已经浏览了web.config并看到关于角色的问题,这可能是我的问题 - 但我不知道从哪里开始。

我会继续追求研究和答案,但会真正感谢任何人可以借出的方向。

开发系统:VS2015(VB)Win 8.1,DB SQL Express

生产机器:Windows Server 2008R2,DB SQL Server 2008R2

1 个答案:

答案 0 :(得分:1)

所以这些是我到目前为止解决问题的方法。仍然需要进行一些测试,但我昨天花了很长时间才开始这么做,我认为它可能会比以后更早帮助某人。

最终的诀窍是几件事。首先,我确实在以下位置的 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并且生产机器运行的是SQL 2008R2,所以它只在生产中需要机器并在本地计算机上的Debug中导致错误。

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

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

enter image description here

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

未在Machine.config文件或根Web.config文件中显式配置以下默认roleManager元素。但是,它是应用程序返回的默认配置。提供程序在Machine.config文件中显式配置。在“备注:默认配置”下的HERE上有更多内容。显然这就是为什么dev框没有插入web.config行就运行良好的原因。

如果它找到了进一步澄清的东西,我会添加更多,但我希望这有助于某人。非常感谢@StuartLC在正确的方向上轻推。

关于删除aspnet_ *表残差的后续行动的最终编辑 所以说实话,我花了很长时间才拿出足够的勇气试图删除剩下的aspnet_ *表,视图,程序,模式和角色。非常感谢,一位优秀的绅士在HERE之前经历了这一点并且非常友好地发布了它。令我惊讶的是,我设置了SQL查询,就像魔术一样,它有效!所以现在我只剩下AspNetRoles ... AspNetUsers表和没有aspnet_ *(下划线)表。