У нас есть приложение ASP.Net, которое ведет себя странно под IIS6. Само приложение представляет собой простую сделку с веб-формами ASP.Net 2.0, ничего сверхъестественного там не происходит (есть пара HTTP-модулей в процессе разработки, но я бы не считал их странными :)). Чего я не понимаю, так это времени выполнения страницы или, точнее, разницы между временем, сообщаемым трассировкой ASP.Net (trace.axd), и наблюдаемым клиентом (Fiddler). Когда приложение запускается в среде разработчика (WinXP, IIS5.1), время, указанное ASP.Net и Fiddler, очень близко:
Page exec time : 0.0919834 Fiddler Total Sequence time: 0.1560980
Я могу понять, что 60 мс тратятся на получение данных размером 5 КБ из IIS в Fiddler (оба работают на одном компьютере, кстати). Теперь, когда мы переносим код на сервер (Win2k3, IIS6), картина кардинально меняется:
Page exec time : 0.1702014 Fiddler Total Sequence time: 0.5156283
Это та же страница, и Fiddler снова работает на той же машине с кодом. Почему для доставки тех же 5 КБ вдруг требуется 350 мс?
PS. На обеих машинах результаты получаются путем доступа к URL-адресу через фактическое имя хоста машины, например. http://machinename/app/page.aspx (в отличие от http://localhost/app/page.aspx).
ППС. С точки зрения конфигурации настройки dev box и сервера настолько близки, насколько это возможно, — оба используют один и тот же файл web.config. Оба попали в БД (сервер sql) со встроенной авторизацией, и, следовательно, приложение работает под учетной записью домена. Приложение использует проверку подлинности с помощью форм и НЕ выдает себя за другое лицо (т. е. оно всегда работает под одной и той же учетной записью). Теперь то, как это работает в IIS5, отличается от IIS6 — в IIS5 учетная запись указывается в теге в файле machine.config, а в IIS6 — в настройке AppPool. Настройка кажется довольно типичной для обеих сред, и я не могу представить, чтобы она вызывала задержки в 350 мс...