Что происходит в IIS/С#, когда запрос прерывается

Итак, я думаю о функциональности, в которой пользователь вставляет ссылку, а серверный код просматривает предоставленную ссылку и отвечает содержимым этой ссылки (например, название страницы, описание, миниатюра и т.д.).

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

Мне интересно, что именно происходит на сервере IIS и, в частности, на мой код С#.

  • Отключен ли поток ответов?
  • Возвращает ли объект Response значение null или Response.Write throw exceptions?
  • Является ли исключение брошенным в ответном потоке только где-нибудь? (что даже не имеет смысла, но что угодно)

Ответ 1

Если код сервера проверяет состояние Response.IsClientConnected, он может остановить работу и произвести пустой ответ, когда клиент прерывает запрос, иначе он просто выполнит запрос как обычно.

Обработка запроса не будет автоматически отменена только потому, что ее больше нет. Код сервера должен активно проверять состояние запроса.

Ответ 2

Ваш веб-сервер не знает, что клиент отменил запрос. Запрос все равно будет выполнен, и ответ будет отправлен обратно. Клиентская сторона script, которую вы пишете, должна иметь возможность обрабатывать текущее состояние вашей страницы.

Если вы уверены, что вас не интересует ответ, я бы рекомендовал отказаться от клиентской стороны запроса:

xhr.abort()

Ответ 3

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

Ответ 4

Как только запрос отправлен на сервер, IIS начнет выполнять код на стороне сервера. Теперь сервер может решить, должен ли выполняться код или нет.

В течение всего цикла страницы вы можете проверить Request.IsClientConnected, как указано Guffa, и прекратить выполнение.

Но да, это полностью зависит от вашего сценария.

Надеюсь, что это поможет.