在我的开发系统(下面)上运行的应用程序成功实现了应用程序中存在的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文件。
我简要地看了一下基于SQL的身份,但发现由于这与用户登录有关,可能只是一个设置。我已经浏览了web.config并看到关于角色的问题,这可能是我的问题 - 但我不知道从哪里开始。
我会继续追求研究和答案,但会真正感谢任何人可以借出的方向。
开发系统:VS2015(VB)Win 8.1,DB SQL Express
生产机器:Windows Server 2008R2,DB SQL Server 2008R2
答案 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)来满足您的特定需求。这里有很多帖子。现在我在生产机器上运行了这个 - 好消息是你可以运行它来安装它并再次运行它来删除它。当我第一次运行它时,它插入了一些表格,如下所示。
初步研究表明了这一点,但最初我在插入生产机器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_ *(下划线)表。