我需要在我的 C# Mono(Linux 上的 Mono 版本 3.12.1)服务器中处理流水线请求,但我注意到管道中的第二个请求总是被忽略。
这是我的 netcat 命令来测试流水线:
nc -v localhost 5000 < httppipe.txt
这是 httppipe.txt 的内容:
GET /heartbeat HTTP/1.1
Host: localhost
GET /heartbeat HTTP/1.1
Host: localhost
我非常有信心我的 netcat 方法有效,因为我在 Java 服务器上成功地对其进行了测试。(意思是我看到了 2 个回复)
在我的 C# 服务器中,我尝试了 GetResult 和 GetResultAsync。GetResultAsync 的代码基本上是从 MSDN 示例中提取的。它看起来像这样:
this.Listener = new HttpListener();
this.Listener.Prefixes.Add(uriPrefix);
this.Listener.BeginGetContext(new AsyncCallback(ListenerCallback),this.Listener);
public static void ListenerCallback(IAsyncResult result)
{
HttpListener listener = (HttpListener) result.AsyncState;
// Call EndGetContext to complete the asynchronous operation.
HttpListenerContext context = listener.EndGetContext(result);
listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
HttpListenerRequest request = context.Request;
// Obtain a response object.
HttpListenerResponse response = context.Response;
// Construct a response.
string responseString = "<HTML><BODY> Hello world!</BODY></HTML>";
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
// Get a response stream and write the response to it.
response.ContentLength64 = buffer.Length;
System.IO.Stream output = response.OutputStream;
output.Write(buffer,0,buffer.Length);
// You must close the output stream.
output.Close();
}
编辑:还尝试在 Linux 上的 Mono 4.0 上无济于事。