博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
"百年一遇"奇怪问题的进展:找到原因,ajax请求中断引起
阅读量:6679 次
发布时间:2019-06-25

本文共 1169 字,大约阅读时间需要 3 分钟。

注:该问题已解决,详见。

问题原因

经过昨天一天的奋战,终于在吃晚饭前找到了"百年一遇"奇怪问题的原因。(问题详情见前一篇博文:)

问题原因是:当服务器安装了 .NET Framework 4.5 之后,在IE中,如果 ASP.NET MVC 处理的 ajax 请求未执行完成时,连接被中断(比如F5刷新浏览器),接下来的请求就会被卡住。

问题验证

用 IE 访问闪存(),按 F12 打开开发者工具,等所有 ajax 请求执行完成再刷新浏览器,问题就不会出现。

我们在测试环境中,取消所有 ajax 请求,问题就不会出现。

问题分析

为什么 ajax 请求被中断后会出现这个问题?

我的猜测是:ajax 请求被中断后,服务器端 ASP.NET Runtime 处理该请求的线程继续保留着(可能在刷新时, IE 继续保持着连接),接下来的请求继续由这个线程处理,于是卡住。所以,重启 IE 问题会消失就是因为这时 IE 发起了新的连接,服务器端用新的线程进行处理,这同时也解释了第一次请求总是不会出现问题。

下面针对中问题的五个奇怪之处逐一进行分析:

1、“问题奇怪之一:服务器是微软的 ASP.NET 环境,出问题的不是其他浏览器,而是微软自己的 IE 浏览器。”

猜测:在刷新时,IE 可能与其他浏览器的处理方式不一样,IE 会继续保持着同一个 HTTP 连接。服务器端 ASP.NET Runtime 对这个连接使用之前为之服务的一个线程处理(可能是 .NET Framework 4.5 的一个改变)。

2、“问题奇怪之二:IE 第一次请求不会出现问题,问题只出现在后续请求中。”

因为问题只会在 ajax 请求被中断后的请求中出现。

3、“问题奇怪之三:同一台服务器,有多个站点,只有这一个站点会出现这个问题。同一个站点(home.cnblogs.com),只有主页与闪存相关页面会出现这个问题。”

出现问题的页有个特征 —— ajax 请求特别多,问题可能与 ajax 请求的数量有关。

4、“问题奇怪之四:WebForms 与 MVC 都会出现这个问题。”

问题在服务器端 ASP.NET Runtime 处理该请求的线程,所以与是 WebForms 还是 MVC 无关。

5、“问题奇怪之五: Global.asax 中取消所有 MVC 的路由注册(routes.MapRoute),问题就消失。”

由于 ajax 请求是由 MVC 处理的,取消 MVC 的路由注册也就不存在 ajax 请求被中断的情况。

继续奋战

进一步的原因以及解决方案还要继续努力研究。。。 

最新进展

将 ajax 请求的处理由 MVC 改为 Web Service(.asmx) 之后,问题不再出现。由此可见,与浏览器、与 js 一点关系没有。

转载地址:http://zynao.baihongyu.com/

你可能感兴趣的文章
日记2014/06/25
查看>>
springboot+Druid+oracle 配置p6spy
查看>>
Maven编译、打war包
查看>>
九 循环
查看>>
组织炎症水平高的RA患者接受TNF拮抗剂治疗的效果更好
查看>>
[洛谷P3709]大爷的字符串题
查看>>
通过映射关系 动态转义为统一格式的数据 (支持 JSON 和 XML )
查看>>
Shell 文本处理三剑客之grep
查看>>
如何写出让人看了恶心的代码
查看>>
http状态码
查看>>
好记性不如烂笔杆-android学习笔记<十五> GridView简单用法
查看>>
最短路径
查看>>
表格相关技巧(双击启动事件、取得行号、定义表格的读写属性)
查看>>
ubuntu server vsftpd 虚拟用户及目录
查看>>
GCD多线程使用
查看>>
[转载] 格式化字符串漏洞原理介绍
查看>>
python小项目之微信远程控制
查看>>
Mysql本地安装多实例后启动遇到的问题
查看>>
用 RPM 打包软件,第 1 部分
查看>>
POJ题目(转)
查看>>