arc*_*hit 9 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());
}
}
Run Code Online (Sandbox Code Playgroud)
该代码在Windows上使用.Net完全正常,但在我对Ubuntu 13.04的测试中,客户端被删除了.我正在使用Mono 3.2.1.
该代码适用于从无法更改的C++客户端连接的RPC服务器.客户端期望连接在整个期间保持打开状态,并且在使用此服务器与Mono时,在unix上出现管道故障并且在Windows上出现错误代码5时失败.
连接没有问题但是在第一个命令之后客户端失败.没有例外.谢谢你的帮助!
编辑1:我撕开单声道HttpListener并直接在我的项目中使用它,现在它也在.Net上失败了.肯定是代码有问题.PS这次是最新的提交代码.
我的第一个问题是我自己解决了:D
我错误的是我自己处理了Request.InputStream流,这是不应该做的.虽然.Net对我没有任何问题,Mono决定检查连接是否可以重复使用,并在流处理时失败.
所以删除了处理流的功能,它的工作原理!
| 归档时间: |
|
| 查看次数: |
1119 次 |
| 最近记录: |