我正在开发一个项目,它将接收包含XML数据的HTTP POST。我将设置HttpListener以接收HTTP POST,然后使用ACK进行响应。
我想知道是否有任何实现类似功能的示例? HttpListener可以在同一时间处理多少个请求?
我将有一个消息队列来存储来自客户端的请求。我将不得不设置一个测试客户端将请求发送到HttpListener以进行测试。我应该设置一个WebRequest或其他东西来测试HttpListener吗?
答案 0 :(得分:18)
您可以使用HttpListener处理传入的HTTP POST,您几乎可以按照您为侦听器找到的任何教程。以下是我的工作方式(请注意,这是同步的,要一次处理多个请求,您将需要使用线程或至少使用异步方法。)
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请求也发送到您的服务器,请务必注意异常。