如何使用HttpListener来接收包含XML的HTTP Post?

问题描述 投票:11回答:1

我正在做一个项目,它将接收包含XML数据的HTTP POSTs。我打算设置HttpListener来接收HTTP POST,然后用ACK响应。

我想知道是否有任何实现类似功能的例子?还有HttpListener可以在同一时间处理多少个请求?

我将有一个消息队列来存储来自客户端的请求。而且我还要设置一个测试客户端,将请求发送到HttpListener进行测试。我应该设置一个WebRequest或其他东西来测试HttpListener吗?

xml http post httplistener
1个回答
23
投票

你可以使用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请求也被发送到你的服务器上,会出现异常。

© www.soinside.com 2019 - 2024. All rights reserved.