2012-06-25 1 views
4

Я понимаю, что Server.Transfer не отправляет обратно обратно запрашивающему клиенту.При использовании Server.Transfer снова выполняется весь жизненный цикл Asp.Net?

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

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

ответ

3

Вот что я нашел с помощью экспериментов.

При использовании Server.Transfer весь жизненный цикл запроса не запускается снова.

Если вы написали свой собственный модуль, подключите его к жизненному циклу запроса и вызовите Server.Transfer с этого модуля, остальная часть жизненного цикла запроса будет пропущена, и жизненный цикл страницы начнется немедленно.

После завершения жизненного цикла страницы передачи жизненный цикл запроса выбирает резервные копии с его событиями срыва. Обратите внимание, что HtppContext для событий срывания будет оригинальным, с которого вы перешли. То есть значения URL и QueryString будут такими же, как и исходный запрос, а не значениями URL и QueryString для страницы, на которую вы перешли.

Server.Transfer изменяет объект HttpContext.Request, чтобы содержать новые URL-адрес и информацию QueryString в течение жизненного цикла страницы для страницы, на которую вы перешли.

Если вы перейдете на ресурс, который не является страницей, а является текстовым (например, something.xml), содержимое этой страницы будет возвращено точно так же, как с его кодировкой, установленной в text/html.

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

1

Это просто прошло вместе с его состоянием. Жизненный цикл запроса не запускается снова, хотя жизненный цикл страницы будет выполняться для страницы, на которую вы переходите.

http://msdn.microsoft.com/en-us/library/ms525800(v=vs.90).aspx

Server.Transfer выступает в качестве замены для эффективного метода Response.Redirect. Response.Redirect указывает браузеру запрашивать другую страницу. Поскольку перенаправление заставляет новый запрос страницы, браузер делает два запроса на веб-сервер, поэтому веб-сервер обрабатывает дополнительный запрос. В IIS 5.0 появилась новая функция Server.Transfer, которая переносит выполнение на другую страницу ASP на сервере. Это позволяет избежать дополнительного запроса, что приводит к повышению общей производительности системы, а также к лучшему опыту пользователя.

Эта ссылка также полезна -
http://www.developer.com/net/asp/article.php/3299641/ServerTransfer-Vs-ResponseRedirect.htm

+0

Спасибо Rich, но ни один из этих ресурсов явно не говорит, что жизненный цикл запроса не запускается снова. Мне кажется, что ресурсы говорят только о том, что он не обрабатывается как второй запрос. –

+0

Вы пытаетесь что-то избежать или что-то сделать? Что конкретно? – Rich

+0

Нет, не было никакой конкретной цели. Я пересматривал старый код и перебегал через «Server.Transfer».Я никогда не видел его раньше, и вся документация, которую я мог найти на нем, была достаточно расплывчатой, так что я не знал, что именно делает. Прежде чем я внесла какие-либо изменения в код, я хотел убедиться, что знаю, что происходит. Я думал, что смогу получить быстрый ответ от сообщества, но когда я этого не сделал, я пошел дальше и сделал свои собственные экспериментальные исследования. Результаты этого исследования вы можете увидеть в моем ответе выше. –

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