• http请求端口占用异常——处理思路


    解决思路:

    1.  ESTABLISHED 过多,使用static解决

           static HttpClientHandler StaticHttpClientHandler = new HttpClientHandler
            {
                AllowAutoRedirect = true,
                Proxy = new System.Net.WebProxy(ConfigHelper.FacebookProxyHostUrl)
            };
    
            static HttpClient StaticHttpClient = new HttpClient(StaticHttpClientHandler, false)
            {
                Timeout = TimeSpan.FromSeconds(10)
            };
    
            [HttpGet]
            [Route(nameof(TestProxy))]
            public async Task<bool> TestProxy()
            {
                string siteUrl = "https://www.google.com";
                var httpClient = StaticHttpClient;
                var requestMessage = new HttpRequestMessage
                {
                    Method = HttpMethod.Get,
                    RequestUri = new Uri(siteUrl, UriKind.Absolute),
                };
                var result =await httpClient.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead);
                result.EnsureSuccessStatusCode();
                return true;
            }
    

      

    2.方案1导致ESTABLISHED 控制住,但是CLOSE_WAIT太多,使用IHttpClientFactory解决

                //Startup.cs中的public void ConfigureServices(IServiceCollection services)
                services.AddHttpClient();
                services.AddHttpClient("configured-proxy-handler")
                .ConfigurePrimaryHttpMessageHandler(() =>
                {
                    return new HttpClientHandler()
                    {
                        AllowAutoRedirect = true,
                        Proxy = new System.Net.WebProxy(ConfigHelper.FacebookProxyHostUrl)
                    };
                });    
    
    
             
            //使用
            private readonly IHttpClientFactory _httpClientFactory;
            public OpsController(IHttpClientFactory httpClientFactory)
            {
                _httpClientFactory = httpClientFactory;
            }
    
            [HttpGet]
            [Route(nameof(TestProxy3))]
            public async Task<bool> TestProxy3()
            {
                string siteUrl = "https://www.google.com";
                var httpClient = _httpClientFactory.CreateClient("configured-proxy-handler");
                httpClient.Timeout = TimeSpan.FromSeconds(10);
                try
                {
                    var requestMessage = new HttpRequestMessage
                    {
                        Method = HttpMethod.Get,
                        RequestUri = new Uri(siteUrl, UriKind.Absolute),
                    };
                    var result = await httpClient.GetAsync(siteUrl, HttpCompletionOption.ResponseHeadersRead);
                    result.EnsureSuccessStatusCode();
                    return true;
                }catch(Exception ex)
                {
                    return false;
                }
            }
    

      

  • 相关阅读:
    【整理学习Hadoop】Hadoop学习基础之一:服务器集群技术
    淘宝开源平台(taobao-code)使用
    【转载】Java定时器的学习
    DHTMLTree、Dtree和Ztree的学习使用
    iBatis 简单介绍及基础入门
    【转载】Spring介绍之二
    透明度标签、html透明度
    下拉列表禁止修改
    list删除、集合遍历删除
    表格样式、表格css、
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/12203076.html
Copyright © 2020-2023  润新知