2010-02-19 4 views
3

У меня есть вопрос, что я не могу найти ответ на этот вопрос ...Что происходит, когда время отрисовки страницы?

Если у вас есть страница ASP.Net, длина которой превышает время ожидания запроса, чтобы сделать то, что происходит с этим процессом? Прерывает ли веб-сервис?

Допустим, я пишу XML в поток ответов на странице ASP.Net, и это время, вызвав мой метод GenerateXML. Что происходит с моим методом? Выполняется ли это, но веб-сервер сообщает о тайм-ауте? или он прерван?

Возможно, я мог бы написать тест, чтобы увидеть мои собственные результаты, но я полагаю, что может быть больше.

ответ

1

Прояснить: В вашем вопросе есть как минимум два тайм-аута (1) тайм-аут сеанса (2) тайм-аут запроса. Наиболее распространенным сценарием является тайм-аут запроса - поскольку клиент не хочет ждать минут, пока сервер не будет жив. И как обычно срок службы запроса меньше, чем сеанс. В этом случае сервер прерывает запрос обычным способом - путем создания ThreadAbortException. Это исключение возникает, даже если все в порядке, просто для завершения обработки запроса.

Когда сеанс превышен - клиент даже не должен знать об этом. Только если у вас есть клиент авторизации, он будет перенаправлен на страницу входа. Но код сервера может потерять данные, хранящиеся в сеансе.

+0

Итак, поток, который выполняет мой запрос на страницу (и, следовательно, метод GenerateXML), выполняется при снятии с ThreadAbort? Каков наилучший способ справиться с этой ситуацией? Я генерирую кэширование XML, но если он всегда срабатывает при первом создании, он никогда не будет кэшироваться. – Jeff

+1

@Jeff: Я всегда ненавижу получать такие ответы, но если ваш рендеринг страниц занимает *, * долгое время, проблема заключается в рендеринге страницы, а не в том, как IIS обрабатывает управление сеансом, так что там вы должны улучшить ... – Treb

+0

Я так понял. Это просто означает больше работы для решения этой проблемы. Мне просто нужно было подумать о процессе запроса страницы, чтобы доказать это самому себе. – Jeff

0

Поскольку процесс рендеринга ничего не знает о тайм-аутах сеанса per se, я полагаю, что рендеринг завершен без каких-либо проблем. Это просто, когда пользователь выполняет действие на визуализированной странице, которая отправляется обратно на сервер, и реализуется tiemout.

Я не могу подтвердить это доказательством прямо сейчас, но для меня это наиболее логичное поведение. Все остальное потребует дополнительных проверок тайм-аута в процессе рендеринга, который стоит cpu time (= money), но никак не улучшит безопасность сеанса.

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