HttpBrowserCapabilities нестабильны после перехода на Asp.Net 4.0
После обновления сайта до asp.net 4.0 на IIS6 мы обнаружили, что в некоторых браузерах Safari возникали проблемы - иногда. Я проследил это до неправильного определения браузера в HttpBrowserCapabilities Asp.net. Иногда браузеры сафари определяют как "mozilla" с EcmaScriptVersion==0.0. К сожалению, это приходит и уходит - иногда это работает, а иногда нет. Браузер с определенным User-Agent будет работать некоторое время, перестанет работать на некоторое время, а затем снова будет работать некоторое время.
Пример пользовательского агента, который не работает (обычно): "Пользовательский агент =Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; ru-ru) AppleWebKit/534.52.7 (KHTML, как Gecko) Версия /5.0.6 Safari/533.22.2"
К сожалению, обнаружение браузера работает правильно на всех наших непроизводственных серверах. Я сравнил файлы браузера Config/Browsers/*. На разных серверах и они идентичны.
Думая, что конфигурация может быть просто кэширована где-то в рамках asp.net, я также запустил "aspnet_regbrowsers.exe -i" из установки 4.0. Это не имеет никакого эффекта.
Это, кажется, происходит независимо от того, обновлен ли кеш браузера - даже браузеры, которые никогда не видели сайт раньше, имеют эту проблему.
Я также перезапустил IIS несколько раз. За исключением перезагрузки, я не могу придумать ничего другого, чтобы попробовать.
Есть идеи, что может быть причиной этого?
РЕДАКТИРОВАТЬ: Янв 19/2012
Я провел несколько дней, пытаясь изолировать эту проблему безуспешно; мне кажется, что это как-то связано с пулом приложений, потому что некоторые пулы приложений возвращали правильное значение, а некоторые нет. Когда я перемещаю глючное веб-приложение из одного пула приложений в другое, оно иногда временно работает до следующего дня, когда оно перестает работать. Я предполагаю, что в пуле есть некоторые потоки, которые повреждены, но я не могу их очистить. Эта периодически возникающая проблема переживает перезапуск пула, остановку и перезапуск iis, а также перезагрузку системы.
Если вы зайдете на http://www.industrymailout.com/Industry/Capability.aspx с Safari, вы увидите, что UserAgents будет отображаться как "Browser=Mozilla", когда должно появиться "Browser=Safari". Однако виртуально настроенное виртуально приложение, которое указывает на тот же каталог ( http://www.mymailout.net/Industry/Capability.aspx), будет работать правильно.
При включенном меню разработчика Safari (в окнах) я могу изменить параметр userragent на "Safari 5.1 - Mac", и он неправильно определяет браузер. Но "Safari 5.1 - Windows" определяется правильно.
Я установил виртуальную машину с Server2003 и IIS6 на ней, чтобы протестировать ее, импортировал все свои настройки IIS6, и там все работает нормально.
Я собираюсь начать переустанавливать все с нуля на новую машину с IIS7- я не знаю, что еще я могу сделать.
1 ответ
Это, кажется, решение:
По сути, кеш браузера заполнен некорректно, поскольку UserAgent усекается до 64 байтов.
После установки этого в Web.config он работает правильно для меня во всех версиях Safari:
<browserCaps userAgentCacheKeyLength="256" />