Получение веб-запроса и обработка

Я новичок в домене веб-приложений и хочу знать, как развернуть веб-страницу и предоставить ее для определенной стороны. У меня есть приложение, которое получает SMS из другого приложения. Мне нужно предоставить веб-страницу для другого приложения, чтобы отправлять сообщения моему приложению.

В основном я хочу открыть страницу MessageReceive.aspx и получать запросы, как показано ниже. Я знаю, как обрабатывать строки запроса, но не знаю, как лучше всего открыть страницу стороннему приложению в Интернете?

http://www.Mysite.com.au/MessageReceive.aspx?ORIGINATOR=61412345678&RECIPIENT=1987654&MESSAGE_TEXT=Hello%20There!

Нужно ли развертывать страницу «MessageReceive.aspx» в качестве веб-приложения в IIS? Если да, не могли бы вы указать мне пример?

Как насчет использования класса HttpListener в службе Windows? Способно ли это сделать?

Спасибо!


person Community    schedule 03.11.2011    source источник


Ответы (2)


Класс HttpListener действительно способен размещать подобную конечную точку внутри любого приложения (например, настольного приложения Windows, службы Windows, консольного приложения и т. д.). довольно просто, однако использование его для обеспечения любого количества параллелизма может быстро стать довольно сложным.

Если вы хотите разместить последовательную конечную точку в службе 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 отвечает за выполнение обработчика обратного вызова асинхронных вызовов.)

person jrista    schedule 03.11.2011
comment
Спасибо за ваш ответ. Нужно ли мне по-прежнему создавать и развертывать веб-страницу в IIS? - person ; 03.11.2011

HttpListener был обновлен и больше не будет принимать какие-либо аргументы в конструкторе. Чтобы установить свои префиксы, вам нужно будет использовать функцию .Add для свойства Prefixes слушателя с массивом строк.

HttpListener listener = new HttpListener();
string[] prefixes = new string[] { "http://localhost:4201/" };
foreach (string s in prefixes)
{
    listener.Prefixes.Add(s);
}
person Thomas    schedule 16.11.2018