Класс HttpListener действительно способен размещать конечную точку, подобную той, в любом приложении (например, приложении Windows Desktop, Windows Service, Консольном приложении и т. Д.) Использование HttpListener в последовательном режиме, когда один запрос за раз может Быть обработанным довольно просто, однако использование его для обеспечения любого количества параллелизма может быстро стать довольно сложным.
Если вы хотите разместить последовательную конечную точку в службе Windows, HttpListener, безусловно, самый быстрый подход. Все, что действительно нужно, это что-то вроде этого
// To start:
var listener = new HttpListener("http://www.mysite.com.au/message/");
listener.Start();
// To stop:
listener.Stop();
listener.Close();
// In background thread:
while (listener.IsListening)
{
var context = listener.GetContext(); // Will block until a request is received
// TOD: Use the context variable (HttpListenerContext type) to get query string parameters and/or the request stream, process data, and configure a response
}
Простая подобная программа будет обрабатывать только один запрос за раз, однако HttpListener может ставить в очередь довольно много запросов одновременно. Если вы не намерены справляться с высокой нагрузкой в вашем сервисе, этого должно быть достаточно. Если вам нужно справиться с высокой нагрузкой и одновременно обрабатывать запросы, вам нужно использовать методы BeginGetContext / EndGetContext и асинхронное программирование. Вы, разработчик, несете бремя, чтобы справиться со всеми сложностями параллельного программирования, регулирования, безопасного и безопасного отключения и т. Д. (Следует отметить, что вызовы EndGetContext имеют тенденцию генерировать вызовы при вызове во время закрытия HttpListener, что возможно, так как ThreadPool отвечает за выполнение обработчика обратного вызова асинхронных вызовов.)