1

我有一个最奇怪的问题!我有一个 ASP.NET 网站应用程序(幸运的是还没有上线)。昨天和之前的每一天,我都可以毫无错误地运行该应用程序。当我昨晚深夜关闭计算机时,它工作正常。今天运行应用程序时,收到一条奇怪的消息,告诉我我的网站已离线,我应该app_offline.htm从根目录中删除该页面以使其重新上线。

我以前从未见过此消息或页面,因此我在网上搜索发现显然 SQL Server 可以在忙于停止任何传入请求(或类似的东西)时将其暂时放在那里。它的正确用途是在您更新或进行维护时停止请求访问您的站点。我按照建议继续删除它。我清理并构建了解决方案,然后尝试运行它。它不再运行。

现在,我的MasterPage代码后面出现错误,我通常MasterPagePage_Load事件处理程序中访问控件(如下所示)。

protected void Page_Load(object sender, EventArgs e)
{
    breadCrumb.BreadCrumbs = BreadCrumbs;
    header.MenuItems = MenuItems;
    footer.Footers = Footers;
    head.Controls.Add(CreateCssLink("~/Stylesheets/main.css", "screen"));
    head.Controls.Add(CreateJavaScriptLink("~/Scripts/site.js"));
    if (Context.Session != null && Session["layout"] == null) Session["layout"] = "single";
    if (!ArePreferencesVisible) preferences.Visible = false;
}

我想在这里澄清一下……这段代码没有错误。中有正确命名的元素MasterPage与此代码中的元素相对应。直到今天它一直按预期工作,自上次工作以来我没有更改任何代码。我现在NullReferenceException在第一行得到一个,因为breadCrumb元素是null. 实际上,此处引用的页面中的所有元素都是null.

Page_Load通常,页面元素在引发事件时已经初始化。是什么导致这种情况停止发生?

我已经仔细检查了 MasterPage 及其文件后面的代码是否仍然连接并且它们是。我还尝试将此代码移至Page_LoadComplete事件处理程序,但控件仍未初始化,即使在那个阶段也是如此。我真的不必更改代码,因为它以前工作得很好。

我还注释掉了这段代码,网站运行了,尽管没有任何样式。有趣的是,当我将原始代码返回给事件处理程序并刷新页面时,它实际上又像以前一样工作了。我成功加载了许多不同的页面,我认为它已经修复了,所以我重新启动了应用程序,然后又遇到了同样的错误。再多的清理、构建、更改解决方案配置或重新启动应用程序和 Visual Studio 都不会产生任何影响。

我不确定这是否app_offline.htm是一条红鲱鱼,但我以前从未见过它,所以它可能以某种方式连接。从我读到的,似乎只是删除它会导致服务器自动重新启动应用程序域,所以我看不到连接。

我真的希望有人以前遇到过这种奇怪的情况,因为我完全没有想法,在解决这个问题之前我无法运行我的网站。

4

1 回答 1

1

好的,所以我终于找到了问题所在。几天前我有一个网站的较早备份,所以我加载了它并且它工作了,尽管错过了最后几天的工作。我将最新的项目代码复制到 Visual Studio > Projects 文件夹中,将旧代码留在 Visual Studio > Website 文件夹中。我加载了解决方案,它再次运行良好。

我基本上比较了网站文件,依次更新每个文件并定期运行应用程序。最终,应用程序停止工作。我更新的最后一个文件是一个MasterPage扩展MasterPage有问题的文件。

我所做的是Page_LoadMasterPage. 我不明白为什么会导致这个问题,所以任何解释这一点的评论都会有所帮助和赞赏。

MasterPage仅在主页和其他一些页面上使用,所以这解释了为什么我在更改它的那天晚上没有遇到问题。MasterPage(进行更改后,我没有查看任何使用该功能的页面)。我希望我有,因为那时追踪起来会容易得多,但生活就是这样。

所以我替换了我所有的最新代码,再次添加了空Page_Load事件处理程序,MasterPage最后,一切都恢复了。

于 2012-05-11T22:17:38.857 回答