httplistener несколько вопросов одновременно
От: kamildag  
Дата: 11.05.11 12:05
Оценка:
Добрый день. Есть слушатель запросов http. За прослушивание отвечает метод Listen

void Listen()
{
var context = _listener.GetContext();
// обработка запроса и отправка ответа

Listen(); // рекурсивный вызов
}

Внимание вопрос. Что произойдет если во время обработки запроса и отправки ответа (указано в комментарии) другая машина отправит запрос,
ведь в этот момент метод GetContext не активен?? И как лучше реализовать такой http слушатель, чтобы обрабатывал все входящие запросы?
Re: httplistener несколько вопросов одновременно
От: dorofeevilya Россия  
Дата: 11.05.11 12:21
Оценка:
Здравствуйте, kamildag, Вы писали:

K>void Listen()

K>{
K> var context = _listener.GetContext();
K> // обработка запроса и отправка ответа

K> Listen(); // рекурсивный вызов

K>}

[offtop]
С рекурсией рано или поздно произойдет переполнение стека.
[/offtop]
Re: httplistener несколько вопросов одновременно
От: QrystaL Украина  
Дата: 11.05.11 12:42
Оценка:
Здравствуйте, kamildag, Вы писали:
K>И как лучше реализовать такой http слушатель, чтобы обрабатывал все входящие запросы?

Например, так: http://bartdesmet.net/blogs/bart/archive/2007/02/22/httplistener-for-dummies-a-simple-http-request-reflector.aspx
Re[2]: httplistener несколько вопросов одновременно
От: kamildag  
Дата: 11.05.11 12:48
Оценка:
Здравствуйте, dorofeevilya, Вы писали:

D>[offtop]

D>С рекурсией рано или поздно произойдет переполнение стека.
D>[/offtop]

Это я уже понял, и обрабатываю просто в бесконечном цикле.
Re[2]: httplistener несколько вопросов одновременно
От: kamildag  
Дата: 11.05.11 12:52
Оценка:
Здравствуйте, QrystaL, Вы писали:

QL>Например, так: http://bartdesmet.net/blogs/bart/archive/2007/02/22/httplistener-for-dummies-a-simple-http-request-reflector.aspx


Спасибо, я так и думал. Но думал что возможно существуют специальные классы для асинхронной обработки запросов, но получается что нет.
Re[3]: httplistener несколько вопросов одновременно
От: QrystaL Украина  
Дата: 12.05.11 08:40
Оценка:
Здравствуйте, kamildag, Вы писали:
K>возможно существуют специальные классы для асинхронной обработки запросов.

BeginGetContext
Re: httplistener несколько вопросов одновременно
От: QrystaL Украина  
Дата: 30.05.11 10:42
Оценка:
Здравствуйте, kamildag, Вы писали:

K>И как лучше реализовать такой http слушатель, чтобы обрабатывал все входящие запросы?


    class Program
    {
        static void Main()
        {
            var hl = new HttpListener();
            hl.Prefixes.Add("http://*:81/");
            hl.Start();

            Prepare(hl);
            Console.WriteLine("Waiting for requests...");
            Console.Read();
        }

        static void Prepare(HttpListener hl)
        {
            var task = Task<HttpListenerContext>.Factory.FromAsync(hl.BeginGetContext, hl.EndGetContext, null);
            task.ContinueWith(ant =>
            {
                Prepare(hl);
                using (var sw = new StreamWriter(ant.Result.Response.OutputStream))
                {
                    sw.Write("Hello " + DateTime.Now);
                }
                Console.WriteLine("Processed request at " + DateTime.Now);
            });
        }
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.