接收Web请求和流程

时间:2011-11-03 02:38:44

标签: c# asp.net .net web-applications httpwebrequest

我是网络应用程序域的新手,我想知道如何部署网页并为特定的一方公开。我有一个从另一个应用程序接收SMS的应用程序。我需要为其他应用程序提供一个网页,以便向我的应用程序发送消息。

我基本上想暴露MessageReceive.aspx页面并接收如下所示的请求。我知道如何处理查询字符串但不确定将页面暴露给互联网上的第三方应用程序的最佳方式吗?

  

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

我是否需要在IIS上部署“MessageReceive.aspx”页面作为Web应用程序?如果是这样,请指点一个例子?

如何在Windows服务中使用HttpListener类?这有能力吗?

谢谢!

2 个答案:

答案 0 :(得分: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方法和异步编程。开发人员要负担处理并发编程,限制,安全和安全关闭等所有复杂问题的负担。(应该注意的是,在关闭HttpListener时调用EndGetContext会抛出,这是因为ThreadPool负责执行异步调用的回调处理程序。)

答案 1 :(得分:0)

HttpListener已更新,将不再接受构造函数中的任何参数。为了设置前缀,您需要在侦听器的Prefixes属性上使用.Add函数和一个字符串数组。

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