加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:50:22 所属栏目:百科 来源:网络整理
导读:我正在开发一个项目,它将接收包含 XML数据的HTTP POST.我将设置HttpListener以接收HTTP POST,然后使用ACK进行响应. 我想知道是否有任何实现类似功能的例子? HttpListener可以同时处理多少个请求? 我将有一个消息队列来存储来自客户端的请求.我将不得不设置
我正在开发一个项目,它将接收包含 XML数据的HTTP POST.我将设置HttpListener以接收HTTP POST,然后使用ACK进行响应.

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

我将有一个消息队列来存储来自客户端的请求.我将不得不设置一个测试客户端将请求发送到HttpListener以进行测试.我应该设置WebRequest或其他东西来测试HttpListener吗?

您可以使用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,b.Length);
    context.Response.Close();
}

从请求中获取XML的主要部分是这一行:

var body = new StreamReader(context.Request.InputStream).ReadToEnd();

这将为您提供HTTP请求的正文,该请求应包含您的XML.您可以将其直接发送到任何可以从流中读取的XML库,但是如果将杂散的HTTP请求也发送到您的服务器,请确保查看异常.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读