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 ответ

Это, кажется, решение:

https://stackoverflow.com/questions/5478181/net-4-0-website-cannot-identify-some-applewebkit-based-browsers

По сути, кеш браузера заполнен некорректно, поскольку UserAgent усекается до 64 байтов.

После установки этого в Web.config он работает правильно для меня во всех версиях Safari:

<browserCaps userAgentCacheKeyLength="256" />
Другие вопросы по тегам