2011-05-06 2 views
4

Я переношу классическое приложение asp (знаю, повезло) на смешанный сайт asp.net/asp, и похоже, что у меня нет доступа к коллекции Request.Form , Так же, как испытание, я сделал это:Классический ASP работает в Integrated Pipeline

for each x in Request.Form 
    Response.Write("<br>" & x & " = " & Request.Form(x)) 
next 

я получаю это:

Запрос об ошибке объект 'ASP 0101: 80004005' Непредвиденная ошибка [мой сценарий], линия хх Функция возвращаемые | ,

Если я переключу пул приложений из Integrated Pipeline в Classic, код работает, но запуск в классическом режиме не является вариантом для приложения .net. Есть ли обходной путь в моем будущем?

ответ

2

Единственное, что вы можете сделать здесь, это создать еще один пул приложений для ваших классических страниц asp и создать для них новое приложение (например, новый виртуальный каталог) в отношении нового пула приложений.

Поскольку вы не можете разделить какое-либо приложение или сферу сеанса между asp и asp.net, это не должно быть проблемой.

0

Неожиданная ошибка при доступе к Request.Form в классическом asp происходит потому, что управляемый модуль или обработчик кода коснулся тела запроса, и после этого он не доступен для собственного кода.

См http://www.asp.net/whitepapers/aspnet4/breaking-changes#0.1__Toc256770154

Управляемый модуль HTTP читает какую-то часть тела сущности. Например, модуль считывает Request.Form или Request.Params. Это заставляет тело объекта запроса POST считываться в управляемую память. В результате тело субъекта больше не доступно для каких-либо встроенных модулей кода, работающих в IIS 7 или IIS 7.5 Integrated mode.

Если вы находитесь в контроле управляемого модуля, вместо того, чтобы просто позволить трубопроводу продолжать классический обработчик осины, используйте Server.TransferRequest с дополнительным заголовком HTTP, что вы можете проверить на следующий раз, когда ваш модуль выполнен. См. Этот ответ https://stackoverflow.com/a/18078054/2837402

+0

Есть ли способ, которым я могу «коснуться запроса» в HttpModule, а не нарушать классический asp. Я пытаюсь создать уловить все блокировки загрузки файлов, и я действительно близок, но прикосновение к форме нарушает классическую загрузку asp. –

+0

Нашел способ, но я должен создать собственный HTTP-модуль на C++, используя httpserv.h ISAPI api класс «CHttpModule». –

+0

Для меня это был Glimpse, который касался моей страницы ASP Classic. Удаление его из моего web.config заставило ASP Classic работать снова. –

Смежные вопросы