2011-09-19 6 views
2

Я реализую пользовательский IHttpModule в проекте, который фильтрует загрузку файлов и предоставляет статус загрузки. Я хочу, чтобы пользовательский модуль рано закрывал соединение (не хотите получать все данные, которые посылает другая сторона, что может быть большим, сохранить входящую полосу пропускания).Закрытие соединения с браузером раннего и возвращающего статуса ответа

Возможно ли использование протокола HTTP?

Я попытался отправить заголовок «ContentLength: 0» и «Connection: close», сбросить ответ, закрыть соединение (HttpWorkerRequest.CloseConnection).

workerRequest.SendStatus(400, "Bad request"); 
workerRequest.SendKnownResponseHeader(HttpWorkerRequest.HeaderContentLength, "0"); 
workerRequest.SendKnownResponseHeader(HttpWorkerRequest.HeaderConnection, "close"); 
workerRequest.FlushResponse(false); 
workerRequest.CloseConnection(); 
((HttpApplication)sender).CompleteRequest(); 

Отзыв об ошибке браузера/firefox отображает сообщение об ошибке «Сброс соединения». Без каких-либо признаков получения каких-либо данных/заголовка/статуса с сервера.

Заранее спасибо.

ответ

1

Клиент-клиент ожидает ответа только после того, как он завершил отправку данных. Вы должны изменить клиент, чтобы сделать несколько запросов с небольшими размерами, чтобы ответ мог быть отправлен на него, вместо того, чтобы сервер закрыл соединение (которое не будет работать и не будет работать так, как вы уже тестировали).

Проверьте, что обработчик http реализован в http://slfileupload.codeplex.com/ для примера того, как это обычно делается.

+0

Невозможно изменить модификацию клиента, так как это должен быть браузер –

+0

В этом случае браузеры также не читают статус. В отправке статуса нет смысла. –

+0

Для загрузки; вам всегда нужно написать свой собственный клиентский плагин в flash или silverlight. –

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