Обработка нескольких запросов с помощью C # HttpListener

У меня есть служба .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 с помощью нескольких строк кода

14
задан Squonk 29 January 2012 в 02:34
поделиться