相关疑难解决方法(0)

使用.NET 4.5和IIS在MVC中应用程序死锁

在最近将应用程序更新到.NET 4.5时,我开始注意到一些与控制器(及其相关的Actions)相关的奇怪行为在来自Javascript的AJAX调用期间被"阻止".

这些问题通常是不一致的,但如果通过异步AJAX调用访问Controller会导致问题,并且在此请求期间会进行另一次调用(通过AJAX或传统方式).

这导致原始呼叫被"阻止",并且通常需要1-2分钟才能解决此"死锁"并且操作按预期执行.

示例场景

  • 用户单击一个链接,该链接将临时存储
    要在下一个请求中访问的ViewData中的值.

  • 发生重定向并访问另一个Controller(应该是)并且在加载AJAX调用之后.

  • 在此AJAX调用(正确访问ViewData值)期间,将快速进行其他调用(例如,用户立即单击链接以导航到另一个Controller).单击此链接后,将出现"死锁",浏览器将无响应.

    要么

  • 的通话将被成功执行(只要它没有被另一个请求中断),但试图执行上述步骤将失败.

附加信息

  • 如上所述,这个问题相当不一致,因为它通常会在第一个请求(AJAX调用)上正确执行,只要它不被中断.但是,如果您再次尝试拨打同一个电话,则会失败.

  • 使用Browser Profiler/Fiddler /开发工具(F12),正在进行第二次AJAX调用,但它似乎永远不会执行.(即使在AJAX调用中放置一个断点,但是尽管调用了断点,但从未命中断点).

  • 此问题仅在Internet Explorer 9或更低版本中发生.

  • 该应用程序使用的是MVC3,.NET Framework 4.5,IIS 7.5,是在Visual Studio 2012中开发的.

试图解决方案

  • SessionState - 尝试用于SessionStateBehavior.ReadOnly避免可能在相关控制器上发生的任何阻塞问题.

  • 临时存储 - 使用各种不同的方法在控制器之间传递临时值,例如ViewData,Session和Cache.

  • ITempDataProvider -目前正在考虑实施一个供应商来处理任何临时值,以便可以将项目迁移到更无会话的解决方案.


更新

在咨询ASP.NET团队的几个成员和其他一些社区贡献者之后,确定该问题实际上是.NET 4.5中的一个错误.

您可以在此博客文章中阅读有关此问题的更多信息,我在此处撰写了相同的主题和更新的修补程序.

.net c# asp.net iis asp.net-mvc

9
推荐指数
1
解决办法
2029
查看次数

如何在我的一半请求上调试SessionStateModule/REQUEST_AQUIRE_STATE> 100秒?

这种情况在最近几天开始发生; 可能是因为我安装了Visual Studio 2012.它目前只发生在我的机器上(我的同事们都在VS 2010上),但我希望卸载VS 2012,看看是否有影响.

我的所有Web请求中约有50%在SessionStateModule/REQUEST_AQUIRE_STATE中挂起约100秒(然后页面成功完成).

ANTS Profiler一直报告为"等待同步",并在一些IIS线程回调中给出了堆栈跟踪(我们的代码都没有;遗憾的是我没有信息可用).

我为所有请求启用了IIS失败请求跟踪,并重新加载了我们应用的同一页面10次.请求3,5,7,9全部耗时> 100秒,其他请求耗时<5秒.

我们正在使用In Process会话,因此没有任何内容通过网络或被序列化.据我所知,在发生这种情况之前,我们的代码都没有运行过.

如何获得有关调试问题的更多信息?

IIS失败请求跟踪截图

可能相关:

即使在调用abort之后浏览器也会等待ajax调用完成(jQuery)

.net c# asp.net iis iis-7.5

6
推荐指数
1
解决办法
1126
查看次数

标签 统计

.net ×2

asp.net ×2

c# ×2

iis ×2

asp.net-mvc ×1

iis-7.5 ×1