C#Mono中HttpListener中的连接丢弃

时间:2014-05-18 09:23:29

标签: c# mono httplistener

我有这样的代码

  public async void Start()
   {
       Logger.Log(Logger.LogLevel.General, "Beginning Listen!");

       HttpListener listener = new HttpListener();
       listener.Prefixes.Add(Statics.Config.IniReadValue("http-server"));
       listener.Start();
       while (true)
       {
           HttpListenerContext client = await listener.GetContextAsync();
           AcceptClient(client);
       }   
   }

   public async void AcceptClient(HttpListenerContext client)
    {
        try
        {
            string sRequest = Helpers.GetRequestBody(client.Request);

            if (sRequest == "")
                return;

            client.Response.ContentType = "application/json";

            //Do a bunch of stuff here

            string s = JsonConvert.SerializeObject(response);
            byte[] byteArray = Encoding.UTF8.GetBytes(s);

            client.Response.ContentLength64 = byteArray.Length;
            client.Response.OutputStream.Write(byteArray, 0, byteArray.Length);

            client.Response.OutputStream.Close();
            client.Response.Close();

        }
        catch (Exception e)
        {
            Logger.Log(Logger.LogLevel.Error, e.ToString());
        }
    }

代码在Windows上使用.Net完全正常,但在我对Ubuntu 13.04的测试中,客户端被删除了。我正在使用Mono 3.2.1。

代码用于从无法更改的C ++客户端连接的RPC服务器。客户端期望连接在整个期间保持打开状态,并且在使用此服务器与Mono时,在unix上出现管道故障并且在Windows上出现错误代码5时失败。

连接没有问题但是在第一个命令之后客户端失败。没有例外。谢谢你的帮助!

编辑1:我撕开了单声道HttpListener并直接在我的项目中使用它,现在它也在.Net上失败了。肯定是代码有问题。附:这次是最新的提交代码。

1 个答案:

答案 0 :(得分:5)

我的第一个问题,我自己解决了:D

我错误的是我自己处理了Request.InputStream流,这不应该完成。虽然.Net对我没有任何问题,Mono决定检查连接是否可以重复使用,并在流处理时失败。

所以删除了处理流的功能,它就可以了!