小编Ada*_*arr的帖子

静态HttpClient仍然创建TIME_WAIT tcp端口

我正在使用.NET Framework中的HttpClient(4.5.1 +,4.6.1和4.7.2)遇到一些有趣的行为.我已经提议在工作项目中进行一些更改,以便在每次使用时不处理HttpClient,因为TCP端口使用率很高的已知问题,请参阅https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong /.

我已经调查了这些更改,以检查事情是否按预期工作,并发现我们仍然遇到与以前相同的TIME_WAIT端口.

为了确认我提议的更改是正确的,我已经向应用程序添加了一些额外的跟踪,以确认我在整个应用程序中使用了相同的HttpClient实例.我已经使用过简单的测试应用程序(取自上面链接的aspnetmonsters网站.

using System;
using System.Net.Http;

namespace ConsoleApplication
{
    public class Program
    {
        private static HttpClientHandler { UseDefaultCredentials = true };
        private static HttpClient Client = new HttpClient(handler);
        public static async Task Main(string[] args) 
        {
            Console.WriteLine("Starting connections");
            for(int i = 0; i<10; i++)
            {
                var result = await Client.GetAsync("http://localhost:51000");
                Console.WriteLine(result.StatusCode);
            }
            Console.WriteLine("Connections done");
            Console.ReadLine();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

仅当使用Windows身份验证连接到IIS中承载的站点时,才会出现此问题.通过将身份验证设置为匿名(问题消失)并返回到Windows身份验证(问题重新出现),我可以轻松地重现该问题.

Windows身份验证的问题似乎不仅限于提供程序的范围.如果您使用Negotiate或NTLM,它也会遇到同样的问题.如果机器只是工作站或域的一部分,也会出现问题.

出于兴趣,我创建了一个dotnet核心2.1.0控制台应用程序,该问题根本不存在,并按预期工作.

TLDR:有没有人知道如何解决这个问题,或者它可能是一个错误?

c# .net-4.5

3
推荐指数
1
解决办法
855
查看次数

标签 统计

.net-4.5 ×1

c# ×1