#c# #asp.net #.net #web-applications #httpwebrequest
#c# #asp.net #.net #веб-приложения #httpwebrequest
Вопрос:
Я новичок в домене веб-приложений, и я хочу знать, как развернуть веб-страницу и предоставить ее для конкретной стороны. У меня есть приложение, которое получает SMS от другого приложения. Мне нужно предоставить веб-страницу для другого приложения, чтобы отправлять сообщения в мое приложение.
Я в основном хочу открыть страницу MessageReceive.aspx и получать запросы, как показано ниже. Я знаю, как обрабатывать строки запроса, но не уверен, что лучший способ предоставить страницу стороннему приложению в Интернете?
http://www.Mysite.com.au/MessageReceive.aspx?ORIGINATOR=61412345678amp;RECIPIENT=1987654amp;MESSAGE_TEXT=Hello There!
Нужно ли мне развертывать страницу «MessageReceive.aspx» в качестве веб-приложения в IIS? Если да, не могли бы вы указать мне пример?
Как насчет использования класса HttpListener в службе Windows? Это способно это сделать?
Спасибо!
Ответ №1:
Класс HttpListener действительно способен размещать конечную точку, подобную этой, Внутри любого приложения (например, настольного приложения Windows, службы Windows, консольного приложения и т. Д.). Последовательное использование 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 отвечает за выполнение обработчика обратного вызова асинхронных вызовов.)
Комментарии:
1. Спасибо за ваш ответ. Мне все еще нужно создавать и развертывать веб-страницу в IIS?
Ответ №2:
HttpListener обновлен и больше не будет принимать никаких аргументов в конструкторе. Чтобы задать свои префиксы, вам нужно будет использовать .Добавьте функцию в свойство Prefixes слушателя с массивом строк.
HttpListener listener = new HttpListener();
string[] prefixes = new string[] { "http://localhost:4201/" };
foreach (string s in prefixes)
{
listener.Prefixes.Add(s);
}