Как очистить поток ответов HttpListener? - PullRequest
6 голосов
/ 27 апреля 2009

HttpListener дает вам поток ответов, но вызов flush ничего не значит (а из источников понятно, потому что он фактически ничего не делает). Копание в HTTP API показывает, что это ограничение самого HttpListener.

Кто-нибудь точно знает, как очистить поток ответов HttpListener (может быть с отражением или дополнительными вызовами P / Invoces)?

Обновление: Вы не можете ничего транслировать по http, если у вас нет опции очистки или возможности определить размер буфера.

Ответы [ 2 ]

2 голосов
/ 27 апреля 2009

Flush работает только в большей части пространства имен System.Net, если для Transfer-Encoding установлено значение Chuncked, в противном случае возвращается весь запрос, а Flush действительно ничего не делает. По крайней мере, это то, что я испытал, работая с HttpWebResponse.

0 голосов
/ 27 апреля 2009

Я еще не пробовал, но как насчет написания отдельного TCP-сервера для потоковой передачи ответов? Затем перенаправьте запрос от HttpListener на «внутренний» tcp сервер. Используя это перенаправление, вы сможете передавать данные обратно, как вам нужно.

Что касается очистки, то единственный способ, которым я это вижу, - это смоделировать избавление, фактически не уничтожая. Если вы можете взломать объект HttpResponseStream, попросить его удалить, сбросить флаг m_Closed и т. Д., Вы можете очистить потоковые данные.

...