У меня есть служба .NET Windows, которая порождает поток, который в основном действует как HttpListener
. Это нормально работает в примере синхронного режима ...
private void CreateLListener()
{
HttpListenerContext context = null;
HttpListener listener = new HttpListener();
bool listen = true;
while(listen)
{
try
{
context = listener.GetContext();
}
catch (...)
{
listen = false;
}
// process request and make response
}
}
Теперь у меня проблема в том, что мне это нужно, чтобы работать с несколькими запросами, и чтобы они отвечали одновременно или, по крайней мере, перекрывали друг друга.
Чтобы пояснить подробнее, клиент - это приложение медиаплеера, которое запускается с запроса мультимедийного файла со свойством заголовка запроса Диапазон байтов = 0-
. Насколько я могу судить, он делает это, чтобы выяснить, что такое медиа-контейнер.
После того, как он прочитал «кусок» (или если он прочитал достаточно, чтобы определить тип носителя), он затем делает другой запрос (с другого номера клиентского сокета) с Range bytes = X-Y
. В этом случае Y - это Content-Length, возвращаемое в первом ответе, а X на 250000 байт меньше этого значения (обнаружено с использованием IIS в качестве теста). На этом этапе он получает последний «кусок», чтобы увидеть, может ли он получить метку времени носителя для измерения длины.
Прочитав это, он делает еще один запрос с байтами диапазона = 0-
(из другого номера сокета), чтобы правильно начать потоковую передачу мультимедийного файла.
Однако в любой момент, если пользователь клиента выполняет операцию «пропуска», он затем отправляет другой запрос (с еще одного номера сокета) с Range bytes = Z-
, где Z - позиция для перейти к медиафайлу.
Я не очень хорошо разбираюсь в HTTP, но, насколько я могу судить, мне нужно использовать несколько потоков для обработки каждого запроса / ответа, позволяя исходному HttpListener
вернуться в режим прослушивания. Я много искал, но не нашел подходящей модели.
РЕДАКТИРОВАТЬ:
Выражение признательности и благодарность Рику Стролу за следующий пример, который я смог адаптировать в соответствии со своими потребностями ...
Добавьте веб-сервер в свое приложение .NET 2.0 с помощью нескольких строк кода