安上.NETFramework4.5后IE浏览器网页卡
一个是微软 IE,一个是微软 .net framework 4.5,出乎意料的是,出现了这样一个奇怪的问题,不禁让人想起一首诗:“本来是同根生的,相煎为何太急”。
让我们来看看这百年一遇的奇怪问题。
问题背景
近期将 job.cnblogs.com 工程中的 Entity Framework 升级到了 5.0,听说 EF 5.0 在 .net framework 4.5 下一个特征会有很大的改善(关于博闻),于是在服务器上安装了它 .NET Framework 4.5。
安装后发现,.NET Framework 4.5 并不在 C:WindowsMicrosoft.NET 安装了中创新文件夹的名称 .NET Framework 4.0 文件夹升级 .NET Framework 4.0 中有很多 dll 文档,例如 System.Web.dll, System.Web.Routing.dll...
还是老规矩,安装后必须重新启动服务器,重新启动所有网站(IIS 7 ASP.NET MVC 3 WebForms),一切都没有发现异常。
难题状况
然后,园友们一个接一个地浏览闪存芯片(home.cnblogs.com/ing/)好卡,逐渐误以为网络线路难题。后来发现有问题的客户用的是 IE 8,误以为 js 由于程序代码浏览器兼容性问题,因此检查 js 编码,在这个过程中不经意间还原了这种情况, 而且用的都是 IE 9。
客户提到的“好卡”到底是什么情况,请参见下图:
“卡”实际上是指计算机浏览器识别对话框中的图标一直在旋转(等待网络服务器响应)。
客户提到的“好卡”到底是什么情况,请参见下图:
“卡”实际上是指计算机浏览器识别对话框中的图标一直在旋转(等待网络服务器响应)。按 F12 开启 IE 在微信开发工具发现计算机浏览器发出请求后,网络服务器初始化失败。表明这种情况和 js 没关系,服务端要求处理事情。
(这个时候,也许你可能会问,你为什么没有发现这种情况?这不仅仅是点击 IE,几秒的事。但是问题没那么简单,用起来也没那么简单。 IE 第一次浏览一切正常,问题的根源在于后续要求,一般是第三次要求。人们通常使用浏览器 Chrome 与 Firefox,因此,在测试过程中使用 IE 打开它,关闭它,看看没有问题。)“卡”问题发生后,即使再次打开网页标识,也是一个难题。唯一的解决办法就是取出所有IE,重新打开。
难题怪异的地方
其中一个奇怪的问题:微软的服务器 ASP.NET 在自然环境中,问题不是其他浏览器,而是微软自己 IE 计算机浏览器。(想不懂)
第二个难题怪异:IE 第一个要求没有问题,问题只出现在以后的要求中。(与浏览器Last-Modified有关吗?
奇怪的三个难题:同一个服务器,有几个网站,只有这个网站会有这种情况。同一个网站(home.cnblogs.com),这种情况只发生在主页和闪存芯片相关页面上。(可能是实际操作造成的)奇怪的四个难题:
WebForms 与 MVC 这种情况都会发生。这种网站是 WebForms 与 ASP.NET MVC 结合自然环境,有问题的网页是 WebForms 网页,但这些界面 ajax 是要求由 MVC 也会有一些类似的问题来处理。(这种操作很有可能 WebForms 与 MVC 都要用到)奇怪的五个难题:
在Global.asax 中取消所有 MVC 申请注册的路由(routes.MapRoute),问题消失了。(WebForms) 与 ASP.NET MVC 自然环境的组合)
确定问题的根源
为了确定这种情况是否存在 .NET Framework 4.5 所引起的?每个人都会在接口测试中 .NET Framework 4.5 卸载掉。此时遇到另一个令人不安的问题,卸载 .NET Framework 4.5 以后,.NET Framework 4.0 没有,令人沮丧的是 IIS 中所有使用 .NET Framework 4.0 应用程序池已经改为 .NET Framework 2.0,这个卸载真的很“整洁”。组装 .NET Framework 4.0 后来,问题立即消退;重新安装 .NET Framework 4.5.问题立即发生。不管是哪种实际操作造成的,.NET Framework 4.5 是元凶。问题解决
昨天一天的战斗没有发现是哪个实际操作造成的,今天再接再厉!如果真的找不到,就要卸载 .NET Framework 4.5,重装 .NET Framework 4.0。
关于编码的难题
ASP.NET MVC 路由器注册代码:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapPageRoute("Default", "", "~/Default.aspx");
routes.MapRoute(
"DefaultMvcAjax",
"ajax/{controller}/{actio
/{id}",
new { controller = "", action = "", id = "" }
);
routes.MapRoute(
"IngMovileMvc",
"ing/mobile/{actio
/{ingListType}/ ageInde
",
new { controller = "IngMobile", action = "Home",
ingListType = CNBlogs.UcHome.Entities.IngListType.all, pageIndex = 1 }
routes.MapRoute( "DefaultMvc", "{controller}/{actio /{id}", new { controller = "Msg", action = "List", id = "" } );}