我有一个使用MVC4构建的网站,它从数据库中获取内容,一切正常。
如果我重新构建解决方案并尝试刷新页面以检查我的更改,我将始终获得SQL网络接口,错误:26表示我无法连接到服务器。
但是,如果我然后浏览到我的主页,然后返回到我正在查看的页面,它将正常工作。
有谁知道什么可能导致这个问题,因为它真的很烦人
修改
除此之外,我发现在重建之后加载AuthorizationContext filterContext时它无法连接到db
编辑2
与下面的neil一样,我发现如果我尝试访问已分配角色的页面,我只会遇到问题
答案 0 :(得分:2)
我看到了完全相同的问题,可以将其跟踪到浏览器中的.ASPXAUTH会话cookie。删除该cookie,数据库错误消失,直到下次重建。
如果您通过身份验证,然后重建项目并尝试浏览以下任何页面,则会定期发生错误:
@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]添加到我的家庭控制器中,我认为已修复它。