SQL网络接口,错误:26仅限解决方案重建

时间:2012-11-22 16:27:53

标签: sql asp.net-mvc authorization roles

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

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

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

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

修改

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

编辑2

与下面的neil一样,我发现如果我尝试访问已分配角色的页面,我只会遇到问题

3 个答案:

答案 0 :(得分:2)

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

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

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

如果您在App_Start / FilterConfig.cs中设置了AuthorizeAttribute过滤器,则每个页面都会显示此内容。

这似乎是最近补丁星期二更新后的新行为。以前,我看到奇怪的行为,我会保持登录但我会失去我的滚动会员资格。在最新的补丁之后,当它获得一个糟糕的.ASPXAUTH cookie(由于重建而无效)时,似乎简单成员会窒息。

我在InitializeSimpleMembershipAttribute.cs中有正确的连接字符串,但它就像Simple Membership在这一个实例中默认为其他内容。

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

<强>更新

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

更新2:

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

答案 1 :(得分:2)

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

删除Cookie可以解决问题。

答案 2 :(得分:0)

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

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

我已经迟到了这个答案的游戏,但是我将[InitializeSimpleMembership]添加到我的家庭控制器中,我认为已修复它。