Назад | Перейти на главную страницу

HttpBrowserCapabilities нестабилен после перехода на Asp.Net 4.0

После обновления сайта до asp.net 4.0 на IIS6 мы обнаружили, что в некоторых браузерах Safari иногда возникали проблемы. Я проследил это до неправильного определения браузера в HttpBrowserCapabilities Asp.net. Иногда он определяет браузеры Safari как "mozilla" с EcmaScriptVersion == 0.0. К сожалению, это приходит и уходит - иногда это работает, а иногда нет. Браузер с определенным 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 на разных серверах, и они идентичны.

Думая, что конфигурация может быть просто кэширована где-то в среде 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) будет работать правильно.

При включенном меню разработчика сафари (в Windows) я могу изменить агент пользователя на «Safari 5.1 - Mac», и он неправильно определяет браузер. Но «Safari 5.1 - Windows» определяется правильно.

Я установил виртуальную машину с Server2003 и IIS6, чтобы протестировать ее, импортировал все свои настройки IIS6, и она там отлично работает.

Я собираюсь начать переустанавливать все с нуля на новую машину с IIS7 --- не знаю, что еще я могу сделать.

Кажется, это решение:

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

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

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

<browserCaps userAgentCacheKeyLength="256" />