Global.asax не запускается для страниц .aspx в IIS7

Мы запускаем службу перенаправления ссылок, которая может обрабатывать ссылки в различных форматах. Один из этих форматов - добавить целевой URL в конец ссылки, например

http://url.fwd/abcd/http://www.mydomain.com/page.aspx

Это работало на Windows Server 2003 / IIS6 в течение последних двух лет, но теперь мы пытаемся перейти на установку Windows Server 2008 / IIS7, и она больше не работает.

Я читал о проблеме с двоеточиями в URL-адресе, но это не влияет на страницы, не заканчивающиеся на .aspx. Например,

http://url.fwd/abcd/http://www.mydomain.com/page.php

перенаправит нормально.

http://url.fwd/abcd/http//www.mydomain.com/page.aspx

также отлично работает (обратите внимание на отсутствие второго двоеточия). Несмотря на то, что это неправильный URL-адрес, он обрабатывается нашей системой переадресации URL-адресов, которая использует настраиваемую страницу 404. В старой системе у нас была аналогичная проблема, поэтому в Global.asax> Application_Error был написан метод специально для обработки случая '.aspx', и он работал нормально.

На нашем новом сервере Application_Error никогда не возникает в Global.asax. Вместо этого я получаю System.NotSupportedException - «Формат данного пути не поддерживается». Это исключение System.NotSupportedException - это тот самый случай, который мы обрабатываем на странице Global.asax, поэтому он определенно не запускается.

Я изменил ключи реестра, указанные в нескольких сообщениях на форуме, HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ ASP.NET VerificationCompatibility = 1 HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ HTTP | Параметры AllowRestrictedChars = 1

Я попытался изменить настройки сопоставления обработчиков для .aspx.

Я пробовал настроить пул приложений на использование классического режима вместо интегрированного, но это вызывает совершенно другую ошибку, когда статический контент, такой как изображения и CSS, вообще не отображается. Я проверил, что статический контент включен в функциях Windows, и это так. В классическом режиме запрос '.aspx' выдает две ошибки неверного запроса без абсолютно никакой информации. Код страницы с ошибкой, которую я получаю, буквально

Плохой запрос ‹html› ‹body› Плохой запрос ‹/body› ‹/html›

ОБНОВЛЕНИЕ: я изменил отображение обработчика статических файлов на форму, представленную на этой странице http://improve.dk/blog/2006/12/11/making-url-rewriting-on-iis7-work-like-iis6 Однако, как Автор правильно отмечает, что это взлом, а не правильный способ делать что-то в IIS7. Он также устраняет проблему статического файла только в классическом режиме. Страницы '.aspx' по-прежнему выдают ошибку в классическом режиме.

Мы будем очень благодарны за любые мысли или предложения на этом этапе.


person roryok    schedule 31.05.2010    source источник
comment
К вашему сведению: я никогда не находил решения для этого. Нам пришлось вернуться к использованию классической страницы ASP для обработки всего входящего трафика и удалить все URL-адреса с суффиксом, заканчивающиеся на «.aspx», а затем передать их в стек ASP.NET. Я очень недоволен этим решением, но оно единственное, что нам удалось найти. Если у кого-то есть идеи о том, как запустить Global.asax в IIS7 для этих запросов, я хотел бы их услышать.   -  person roryok    schedule 30.07.2010
comment
В качестве обновления еще в '09 я опубликовал продолжение своего первоначального хака, подробно описывая, как заставить его работать должным образом: Improve.dk/archive/2009/10/14/ :)   -  person Mark S. Rasmussen    schedule 09.09.2011


Ответы (2)


Решение IIS 7

Простое решение в IIS 7 - добавить параметр в файл web.config, чтобы указать IIS обрабатывать все запросы через события Global.asax. Просто добавьте или измените этот раздел в своем web.config, чтобы разрешить запросы:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
person Manoj    schedule 17.09.2010
comment
Магическое свойство - это ‹модулей runAllManagedModulesForAllRequests = true› .. ‹/modules› - person Helephant; 30.06.2011
comment
Спасибо, слоник! Это было именно то, что я искал. - person abjbhat; 20.04.2013

В моем случае я опубликовал свой сайт в рабочей среде, и мне не удалось скопировать файл App_global.asax.compiled на сервер. По этой причине не было запущено События внутри Global.asax.

Надеюсь, что Anyelse поможет этим советам, я потерял 8 часов на поиски.

person Hernaldo Gonzalez    schedule 23.03.2017
comment
да. Я попробовал предварительно скомпилировать приложение и развернуть его, а затем попробовал без предварительной компиляции, и старые файлы не удалялись. Так они все испортили! - person Shiroy; 02.07.2019