我有一個簡單的C#Windows服務應該作出迴應「OK」來獲得對端口的請求8080 一切正常,一個簡單的癢......HttpListener葉TIME_WAIT連接
到由每一個請求服務停留在TIME_WAIT。 我是否錯過了一些東西,我環顧四周,大多數我在HTTPListeners和Windows服務上看到的樣本都是以類似的方式做的?
private HttpListener _listener;
protected override void OnStart(string[] args)
{
_listener = new HttpListener();
_listener.Prefixes.Add("http://*:8080/");
_listener.Start();
_listener.BeginGetContext(new AsyncCallback(OnRequestReceive), _listener);
}
protected override void OnStop()
{
_listener.Stop();
}
private void OnRequestReceive(IAsyncResult result)
{
if (!_listener.IsListening)
return;
//Get context for a request.
HttpListenerContext context = _listener.EndGetContext(result);
HttpListenerRequest request = context.Request;
//Obtain a response object.
HttpListenerResponse response = context.Response;
response.ContentType = "application/json";
response.KeepAlive = false;
//Our return message...
string responseString = "OK";
//Construct the response.
byte[] buffer = Encoding.UTF8.GetBytes(responseString);
Stream output = response.OutputStream;
response.ContentLength64 = buffer.Length;
output.Write(buffer, 0, buffer.Length);
//Close and send response
try
{
output.Flush();
output.Close();
response.Close();
}
finally
{
//Wait for another request
_listener.BeginGetContext(new AsyncCallback(OnRequestReceive), _listener);
}
}
編輯:固定_listener的本地聲明。
而4分鐘後?它看起來如何? (假設沒有新的連接進來) – rene
你有2個'_listener':方法作用域和類作用域。先修復它。 – abatishchev
經過測試,4分鐘後TIME_WAIT連接消失。現在有辦法讓他們在TIME_WAIT停留4分鐘。 – Eramas