4

我有一个使用 MVC4 构建的站点,该站点从数据库中获取内容,并且一切正常。

如果我然后重建解决方案并尝试刷新页面以检查我的更改,我将始终得到 SQL 网络接口,错误:26 说我无法连接到服务器。

但是,如果我然后浏览到我的主页,然后返回到我正在查看的页面,它将正常工作。

有谁知道什么可能导致这个问题,因为它真的很烦人

编辑

除此之外,我发现在重建后加载 AuthorizationContext filterContext 时,它无法连接到数据库

编辑 2

与下面的尼尔一样,我发现只有在尝试访问已分配角色的页面时才会遇到问题

4

3 回答 3

2

当我登录浏览器时,在重建应用程序时发生了这种情况。

删除 cookie 为我解决了这个问题。

于 2014-10-06T19:42:49.960 回答
2

我看到了完全相同的问题,可以将其追溯到浏览器中的 .ASPXAUTH 会话 cookie。删除该 cookie,数据库错误就会消失,直到下一次重建。

如果您通过身份验证,然后重新构建项目并尝试浏览以下任一页面,则该错误会定期发生:

  • 需要身份验证
  • 调用 User 对象(例如@if (User.IsInRole("Administrators"))

如果您在 App_Start/FilterConfig.cs 中设置了 AuthorizeAttribute 过滤器,您将在每个页面上都看到它。

这似乎是最新补丁星期二更新后的新行为。以前,我看到奇怪的行为,我会保持登录状态,但我会失去我的滚动会员资格。在最近的补丁之后,似乎 Simple Membership 在收到错误的 .ASPXAUTH cookie 时会阻塞(由于重建而无效)。

我在 InitializeSimpleMembershipAttribute.cs 中有正确的连接字符串,但在这个实例中,就像简单成员默认为其他东西一样。

请注意,我已将 Simple Membership 数据库从原始 (localDb) 移动到成熟的(本地)SQL Server 实例。不知道为什么这很重要,并且在所有其他情况下都可以正常工作。

更新:

我还尝试使连接字符串名称与 EF 上下文名称(例如“ProjectContext”)相同,理论上它默认为标准约定,但这并没有什么区别。我在所有上下文类构造函数中明确识别连接字符串名称(使用: base("connectionString")语法),并且简单成员能够在所有其他时间找到正确的连接字符串。

更新 2:

只有在访问受角色保护的页面时重建后才会出现此问题。一个简单的[Authorize]不会触发它。你需要类似的东西[Authorize(Role="Admin")]。我已经在一个新的 MVC 4 项目上复制了这个,没有其他修改,使用默认的 (localDb) 数据库。清除 cookie,同一用户可以访问受保护的内容而不会出现任何问题。我相信这是一个核心 .NET 或 MVC 错误,需要这样报告。

于 2012-11-23T12:43:09.100 回答
0

使用 SimpleMembership 时,任何使用角色都会出现此错误 - 不仅在控制器中,而且在我使用时也会出现:

如果(角色。IsUserInRole(角色名){...

我迟到了这个答案,但我将 [InitializeSimpleMembership] 添加到我的家庭控制器中,我认为这解决了它。

于 2013-08-22T20:57:11.990 回答