我有一个托管的Windows Azure网站。我发现网站在用户网络浏览器中锁定的情况(几个月前我问过这个问题 - Launching SSRS Report causes browser to hang)。
我已经设置了流日志记录,现在可以在VS2015中查看流。我是global.asax,我在每个处理程序的开头和结尾添加了一个trace语句。关于我的失败(挂起)请求 - 请参阅链接帖子以获取更多详细信息 - 我看到" PostMapRequestHandler"事件彻底发生。似乎触发的下一个事件(基于监视成功的请求)是AcquireRequestState。
在我失败的请求状态中,我从未看到AcquireRequestState完成。如果我提出了一个有目的的错误 - 抛出新的例外("扔我") - 该应用程序将显示黄色。但是如果我在这里只有我的跟踪语句,我从来没有看到这个方法完成。
当我处于这种糟糕的状态时,浏览器永远不会从服务器返回响应。在等待大约5-10分钟后,该页面将为500。如果我完全关闭浏览器并打开一个新窗口,基本上会抛弃旧的会话信息,我只能解决这个问题。
答案 0 :(得分:0)
有几种可能性:
Thread.Suspend()
,new StackTrace(thread, true)
和Thread.Resume()
获得了公平(不是很好)的结果。请注意,其中一些功能已被弃用,这需要非常小心。您需要非常小心地在每个请求进入时创建一个Threads列表,并添加一种新类型的请求,该请求遍历列表获取线程状态并将其转储出去。 (.NET中缺少此功能是诊断诸如你的问题的严重问题(在大型系统中并不罕见)。这对我来说听起来像是一个无限循环。
答案 1 :(得分:0)
您是否尝试将调试程序附加到您的网络应用程序?你可以这样做: https://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-troubleshoot-visual-studio/
连接调试器将允许您查看所有线程和调用堆栈,因此它应该有助于诊断问题。