为什么我的新 .Net 4.0 EF 应用程序会随机锁定?

2024-03-19

我最近推出了一个新的 ASP .Net 应用程序。该应用程序使用.Net 4.0和Entity Framework 4。它是一个“基本”CRUD应用程序。我几乎专门使用 EntityDataSource 进行数据访问。

用户报告了应用程序“偶尔冻结”(他们都使用 IE 8)。如果用户关闭浏览器并重新启动,则应用程序正常。这种情况每天可能会发生一到两次,通常对于重度用户来说。 (因此,我一直倾向于内存泄漏或其他某种资源限制。)

直到不久前,我还从未见过这种情况发生。它不会在客户端 PC 或服务器上的事件日志中留下任何内容。此外,IIS 错误日志或 SQL 日志中也没有任何内容。

不久前,我终于实现了这一点。我将所有 EntityDataSource 切换为每页使用一个对象上下文。我下载了 EF Profiler(这似乎是一款很棒的产品),它指出我在许多页面上使用多个对象上下文,因为其中许多页面都有多个 EntityDataSource。所以,我正在清理所有这些并测试每个页面,当你瞧......IE 停止加载页面!

起初,页面开始加载缓慢(这是我已经修改为使用单个对象上下文的页面,所以尽管我仍然相信我需要在所有页面中实现这种“单例”模式,但我想它不是' t 罪魁祸首!无论如何..),然后在某个时候我收到:

消息:Sys.WebForms.PageRequestManagerTimeoutException:服务器请求超时。

事件日志中仍然没有任何内容。我还检查了 IIS 网络日志,我没有看到任何内容,但是用肉眼很难阅读它们,我可能必须下载一个解析器以确保其中没有任何内容。

不管怎样,我决定启动另一个窗口并导航到我的应用程序,果然该窗口工作正常,没有问题。我回到停止响应的窗口,刷新它,等待...转到我的应用程序的主页(基本上只是一些静态 html.. 没有任何内容...)。接下来,我在当前冻结的窗口中打开了一个新选项卡,该选项卡工作正常。因此,我返回到无法再从我的应用程序加载页面的窗口,并尝试其他一些网站...espn.com 加载正常,msn.com 加载正常,然后我输入我的应用程序主页的 URL (并尝试了我的应用程序中的其他一些页面)但什么也没有。 IIS 甚至不会在其日志文件中记录尝试(就像 IE 刚刚决定不再为我的本地主机执行“获取”操作一样!)。最后,等待一段时间后(当我输入这篇文章时),我现在在该窗口中看到以下错误消息:

Internet Explorer无法显示该网页。您可以尝试的操作:该问题可能是由多种问题引起的,包括:BLAH BLAH BLAH...

因此,我跳回该窗口,它仍然可以正常浏览互联网站点。但是,当我再次尝试访问应用程序中的任何页面时,我什么也没有得到(选项卡中旋转的蓝色圆圈)。因此,我再次在同一浏览器中启动一个新选项卡,我可以很好地浏览我的应用程序。

我的应用程序对此浏览器实例做了什么,不再让它加载任何页面(事实上,它似乎甚至没有在任何应用程序页面上执行 GET,因为 IIS 中没有任何新内容)日志...除了当我在这些其他选项卡和/或浏览器窗口中加载页面时工作正常,因此日志记录仍在工作...)?我将永远感激能够帮助我解决这个问题的人。我不确定它会有多大作用,但我将保留此浏览器窗口,以便有人可以告诉我一些事情来尝试诊断此问题。感觉我已经很接近弄清楚了。我终于有一扇行为不端的窗户了。我害怕关闭窗口或在应用程序上进行新的构建,直到我得到一些关于尝试的好的意见......

我应该补充一点,当这种情况发生在我身上时,我正在本地电脑上运行,所以我是唯一的用户,并且只打开了一个应用程序窗口。

虽然,我完全被难住了!


我们遇到了同样的问题,似乎通过将以下 JavaScript 添加到所有使用 ajax 的页面来解决该问题:

window.onunload = abortRequest;
function abortRequest() {
   Sys.WebForms.PageRequestManager.getInstance().abortPostBack();
} 

我希望这有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的新 .Net 4.0 EF 应用程序会随机锁定? 的相关文章

随机推荐