Session_Start запускается несколько раз в проекте ASP.NET MVC3 по умолчанию

Думаю, я обнаружил проблему с ASP.NET MVC и его конвейером событий. В частности, я обнаружил, что Session_Start вызывается несколько раз, каждый из которых содержит новый SessionID.

Вот пошаговый процесс:

  1. Открыть VS2010
  2. Файл | Новый проект
  3. Веб-приложение ASP.NET MVC 3, примите имя по умолчанию, нажмите OK
  4. Выберите Интернет-приложение (хотя я не думаю, что это действительно имеет значение), нажмите OK
  5. По окончании создания отредактируйте Global. asax.cs файл
  6. Добавьте следующий метод (да, он пуст):

    protected void Session_Start () { }

  7. Установите точку останова в методе

  8. Debug
  9. Обратите внимание, что точка останова перехватывается дважды перед отображением страницы. Если вы посмотрите «Session.SessionID», когда будут обнаружены точки останова, вы увидите, что идентификатор сеанса каждый раз новый.
  10. Как только вы перейдете на домашнюю страницу, щелкните ссылку на вкладке «Home» или «About».
  11. Session_Start будет запущен снова, на этот раз с новым SessionID.
  12. Продолжить выполнение, и любые последующие действия больше не будут запускать Session_Start.

Я пробовал то же самое в стандартном веб-приложении ASP.NET (не MVC), а Session_Start запускается только один раз.

Я почти уверен, что не делаю здесь что-то не так, поскольку я использую шаблоны проектов по умолчанию, и единственный код, который изменяется, - это Global.asax.cs файл, чтобы добавить метод Session_Start.

Я использую IIS Express, но я повторил вышеупомянутые шаги, используя веб-сервер "Cassini" (Visual Studio Development Server), с тем же результатом.

Любой совет?

ОБНОВЛЕНИЕ

Я решил использовать Fiddler для проверки HTTP-трафика во время сеанса отладки. Кажется, что:

  1. Первый Session_Start запускается, когда я запрашиваю URL-адрес "/". Это кажется разумным. Сгенерированный в это время SessionID записывается в ответ браузеру. Опять же, это кажется разумным.
  2. Затем Fiddler показывает запросы / ответы для файлов * .js и * .css. Всем успехов. Ни один из них не запускает Session_Start. Пока хорошо.
  3. Затем Fiddler показывает, что был сделан запрос для "/favicon.ico". В это время запускается Session_Start и генерируется новый SessionID ... Продолжаю.
  4. В Fiddler он показывает, что файл «/favicon.ico» не был найден (404). Отображается веб-страница. Я нажимаю ссылку «Главная».
  5. Запрашивается URL-адрес «/», и ответ в Fiddler нормальный. Но затем запрашивается другой файл «/favicon.ico», и снова Session_Start запускается с новым SessionID ... Я продолжаю.
  6. На все последующие запросы есть ответы, и браузер перестает запрашивать «/favicon.ico».

Я записал каждый из трех сгенерированных SessionID, и похоже, что браузер придерживается первого. Итак, когда мы подошли к шагу 6 выше, и все вроде бы работает, на самом деле он использует самый первый сгенерированный SessionID.

Итак ... Я решил разместить файл "favicon.ico". Я поместил файл ico в корень проекта и снова начал сеанс отладки. На этот раз Session_Start срабатывает только один раз. "/favicon.ico" был успешно обработан (200).

Итак ... Я думаю, в определенном смысле он работает так, как должен ... Но почему вызовы "/favicon.ico" запускают Session_Start мероприятие???? Разве у меня не должно быть выбора НЕ размещать значок?

В стороне: Я пробовал все вышеперечисленное в проекте ASP.NET (не mvc), и у него не было такой же проблемы, хотя и не было значка. ico, размещенный в проекте «Веб-приложение ASP.NET» по умолчанию.

5
задан Lee DeLapp 17 August 2011 в 20:06
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: