Rio*_*ams 9 .net c# asp.net iis asp.net-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 4.5.(删除.net 4.5可修复此问题.)如果在Visual Studio Development Server中调试应用程序或将AppPool设置为经典模式,则不会发生此问题.它似乎与集成模式下的AppPool与IIS 7.5和.net 4.5相关.
我发现其他人有问题,但没有明确的答案. 当访问会话时,IE双回发会在集成管理管道模式下挂起IIS 7
归档时间: |
|
查看次数: |
2029 次 |
最近记录: |