我们有一个 ASP.Net 应用程序,它在 IIS6 下表现异常。该应用程序本身是简单的 ASP.Net 2.0 Webforms 交易,没有什么太奇怪的事情发生(管道中有几个 HTTP 模块,但我不会认为那些奇怪的 :) )。我不明白的是页面执行时间,或者更具体地说,是 ASP.Net 跟踪 (trace.axd) 报告的时间与客户端 (Fiddler) 观察到的时间之间的差异。当应用在开发者的盒子(WinXP、IIS5.1)上运行时,ASP.Net和Fiddler报告的时间非常接近:
页面执行时间:0.0919834 Fiddler 总序列时间:0.1560980
我可以理解花费 60 毫秒将 5KB 的数据从 IIS 传输到 Fiddler(两者都在同一台机器上运行,顺便说一句)。现在,当我们将代码移动到服务器(Win2k3、IIS6)时,画面发生了巨大的变化:
页面执行时间:0.1702014 Fiddler 总序列时间:0.5156283
这是同一页面,Fiddler 再次与代码在同一台机器上运行。为什么传送相同的 5KB 突然需要 350 毫秒?
PS。在两台机器上,结果都是通过通过实际机器的主机名访问 URL 获得的,例如http://machinename/app/page.aspx(与http://localhost/app/page.aspx相对)。
聚苯乙烯。配置方面,开发盒和服务器的设置尽可能接近——两者都使用完全相同的 web.config。两者都使用集成的身份验证访问数据库(sql server),因此,应用程序在域帐户下运行。该应用程序使用表单身份验证,并且不会模拟(即它始终在同一帐户下运行)。现在,它在 IIS5 上的工作方式与 IIS6 不同——在 IIS5 上,帐户在 machine.config 的标记中指定,而在 IIS6 上,它是 AppPool 设置。两种环境的设置似乎都很典型,我无法想象它会导致 350 毫秒的延迟......