Добрый день. Есть слушатель запросов http. За прослушивание отвечает метод Listen
void Listen()
{
var context = _listener.GetContext();
// обработка запроса и отправка ответа
Listen(); // рекурсивный вызов
}
Внимание вопрос. Что произойдет если во время обработки запроса и отправки ответа (указано в комментарии) другая машина отправит запрос,
ведь в этот момент метод GetContext не активен?? И как лучше реализовать такой http слушатель, чтобы обрабатывал все входящие запросы?
Здравствуйте, kamildag, Вы писали:
K>И как лучше реализовать такой http слушатель, чтобы обрабатывал все входящие запросы?
Например, так:
http://bartdesmet.net/blogs/bart/archive/2007/02/22/httplistener-for-dummies-a-simple-http-request-reflector.aspx
Здравствуйте, QrystaL, Вы писали:
QL>Например, так: http://bartdesmet.net/blogs/bart/archive/2007/02/22/httplistener-for-dummies-a-simple-http-request-reflector.aspx
Спасибо, я так и думал. Но думал что возможно существуют специальные классы для асинхронной обработки запросов, но получается что нет.
Здравствуйте, kamildag, Вы писали:
K>возможно существуют специальные классы для асинхронной обработки запросов.
BeginGetContext
Здравствуйте, 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);
});
}
}