在IIS6上将站点升级到asp.net 4.0后,我们发现有些Safari浏览器偶尔会出现问题。 我已经将其追溯到Asp.net的HttpBrowserCapabilities中的一个不正确的浏览器检测。 有时候用EcmaScriptVersion == 0.0检测Safari浏览器为“mozilla”。 令人沮丧的是,这是来来往往 – 有时是有效的,有时却不行。 具有特定用户代理的浏览器将工作一段时间,停止工作一段时间,然后再工作一段时间。
一个用户代理程序不能正常工作的例子是:“User Agent = Mozilla / 5.0(Macintosh; U; Intel Mac OS X 10_5_8; en-us)AppleWebKit / 534.52.7(KHTML,像Gecko)版本/ 5.0.6 Safari / 533.22.2“
烦人的是,浏览器检测在我们所有的非生产服务器上正常工作。 我比较了不同服务器上的Config / Browsers / *。browser文件,它们是相同的。
考虑到configuration可能只是caching在asp.net框架的某个地方,我也从4.0安装运行“aspnet_regbrowsers.exe -i”。 这没有任何作用。
无论浏览器是否刷新了caching,这似乎都会发生 – 即使浏览器从未见过该站点,也会遇到此问题。
我也重新启动了几次IIS。 没有重新启动,我想不出别的办法。
任何想法可能导致这个?
编辑:2012年1月19日
我花了好几天的时间试图找出这个问题失败的原因。 它在我看来也许它与应用程序池有关,因为一些应用程序池正在返回正确的值,但有些不。 当我将一个错误的web应用程序从一个应用程序池移动到另一个应用程序池时,它有时会暂时工作,直到第二天它不再工作。 我的猜测是,游泳池有一些线程是腐败的,但我似乎无法清除它们。 这个间歇性的问题在回收池,停止和重启iis以及重新启动系统时仍然存在。
如果您使用Safari浏览器访问http://www.industrymailout.com/Industry/Capability.aspx ,您可以看到UserAgents会显示为“Browser = Mozilla”,并显示为“Browser = Safari”。 但是,指向相同目录( http://www.mymailout.net/Industry/Capability.aspx )的相同configuration的虚拟应用程序将正常工作。
随着safari开发菜单启用(在Windows上),我可以将useragent更改为“Safari 5.1 – Mac”,并检测到不正确的浏览器。 但是“Safari 5.1 – Windows”被正确检测到。
我build立了一个VM与Server2003和IIS6上testing它,导入我所有的IIS6设置,它在那里工作正常。
我即将开始重新安装IIS7的新机器上的所有东西—我不知道我还能做什么。
这似乎是解决scheme:
本质上,浏览器caching填充不正确,因为UserAgent被截断为64字节。
在Web.config中设置后,它在所有版本的Safari中都能正常工作:
<browserCaps userAgentCacheKeyLength="256" />