我正在做一个项目,它将接收包含XML数据的HTTP POSTs。我打算设置HttpListener来接收HTTP POST,然后用ACK响应。
我想知道是否有任何实现类似功能的例子?还有HttpListener可以在同一时间处理多少个请求?
我将有一个消息队列来存储来自客户端的请求。而且我还要设置一个测试客户端,将请求发送到HttpListener进行测试。我应该设置一个WebRequest或其他东西来测试HttpListener吗?
你可以使用HttpListener来处理传入的HTTP POST,你几乎可以按照你找到的任何监听器的教程来做。 下面是我是如何做的(注意,这是同步的,要处理超过1个请求的时间,你将希望使用线程或至少异步方法。
public void RunServer()
{
var prefix = "http://*:4333/";
HttpListener listener = new HttpListener();
listener.Prefixes.Add(prefix);
try
{
listener.Start();
}
catch (HttpListenerException hlex)
{
return;
}
while (listener.IsListening)
{
var context = listener.GetContext();
ProcessRequest(context);
}
listener.Close();
}
private void ProcessRequest(HttpListenerContext context)
{
// Get the data from the HTTP stream
var body = new StreamReader(context.Request.InputStream).ReadToEnd();
byte[] b = Encoding.UTF8.GetBytes("ACK");
context.Response.StatusCode = 200;
context.Response.KeepAlive = false;
context.Response.ContentLength64 = b.Length;
var output = context.Response.OutputStream;
output.Write(b, 0, b.Length);
context.Response.Close();
}
从请求中获取XML的主要部分是这一行。
var body = new StreamReader(context.Request.InputStream).ReadToEnd();
这给你HTTP请求的主体,其中应该包含你的XML。 你可能可以直接把它发送到任何可以从流中读取的XML库中,但一定要注意如果一个杂散的HTTP请求也被发送到你的服务器上,会出现异常。