![](/img/trans.png)
[英]Asp.net Core HttpClient has many TIME_WAIT or CLOSE_WAIT connections
[英]HttpListener leaves connections in TIME_WAIT
我有一个简单的C#Windows服务,应该对端口8080上的GET请求做出“确定”的响应。一切正常,只有一个简单的问题...
对服务的每个单独请求都保留在TIME_WAIT中。 我是否丢失了某些东西,我环顾四周,并且在HTTPListeners和Windows Services上看到的大多数示例都以类似的方式进行?
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的本地声明。
感谢rene指出正确的方向...
TIME-WAIT(服务器或客户端)表示等待足够的时间以确保远程TCP收到其连接终止请求的确认。 [根据RFC 793,连接可以在TIME-WAIT中停留最多四分钟,这被称为MSL(最大段寿命)。]
对于任何其他想更改此行为的人:可以通过修改以下表示TIME_WAIT周期(以秒为单位)的DWORD注册表设置来配置TIME_WAIT周期。
HKEY_LOCAL_MACHINE \\ System \\ CurrentControlSet \\ Services \\ TCPIP \\ Parameters \\ TcpTimedWaitDelay
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.