亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有 .Net Core 2.1 的 HttpClient 掛起

帶有 .Net Core 2.1 的 HttpClient 掛起

C#
收到一只叮咚 2021-07-21 21:54:27
鑒于以下 .Net Core 2.1 控制臺應用程序...using System;using System.Diagnostics;using System.Net.Http;using System.Net.Http.Headers;namespace TestHttpClient{    class Program    {        static void Main(string[] args)        {            try            {                using (var httpClient = new HttpClient())                {                    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));                                        string url = "https://jsonplaceholder.typicode.com/posts/1";                    var response = httpClient.GetAsync(url).Result;                    string jsonResult = response.Content.ReadAsStringAsync().Result;                   }            }            catch (Exception ex)            {                Debug.WriteLine(ex.ToString());            }        }    }}對 GetAsync 的調用掛起并引發異常并顯示以下消息:System.Net.Http.HttpRequestException: 連接嘗試失敗,因為連接方在一段時間后沒有正確響應,或者由于連接的主機未能響應而建立的連接失敗 ---> System.Net.Sockets.SocketException: A連接嘗試失敗,因為被連接方在一段時間后沒有正確響應,或者因為連接的主機沒有響應而建立連接失敗但是,切換到 .Net Core 2.0 并且它工作正常......筆記我試過使用:HttpClientFactory -> Same resultWebRequest        -> Same result想法?更新 1 這在不在公司網絡上時有效,這可能意味著代理的行為可能會發生變化。但是,無論如何,core2.0 仍然可以工作,因此試圖找到差異。更新 2 似乎引入了一個錯誤,據報道...https://github.com/dotnet/corefx/issues/30166#issuecomment-395489603
查看完整描述

3 回答

?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

因此,顯然有一個關于此的錯誤/重大更改。


這里:https : //github.com/dotnet/corefx/issues/30166 https://github.com/dotnet/corefx/issues/30191


我認為我正在經歷兩個獨立但相關的問題。


但是,我發現似乎是一種解決方法。


using System;

using System.Diagnostics;

using System.Net.Http;

using System.Net.Http.Headers;

using System.Threading.Tasks;


namespace TestHttpClient

{

    static class Program

    {

        static async Task Main(string[] args)

        {

            try

            {

                using (var httpClient = new HttpClient(new WinHttpHandler() { WindowsProxyUsePolicy = WindowsProxyUsePolicy.UseWinInetProxy }))

                {

                    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));


                    string url = "https://jsonplaceholder.typicode.com/posts/1";                   


                    var response = await httpClient.GetAsync(url);

                    string jsonResult = await response.Content.ReadAsStringAsync();

                }

            }

            catch (Exception ex)

            {

                Debug.WriteLine(ex.ToString());

                throw;

            }

        }

    }

}

這里的關鍵部分是使用WinHttpHandler和設置WindowsProxyUsePolicy,以WindowsProxyUsePolicy.UseWinInetProxy


WinHttpHandler通過添加 nuget 包System.Net.Http.WinHttpHandler 找到


查看完整回答
反對 回復 2021-07-31
?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

這是 CoreFx 2.1 中的一個更改,導致HttpClient使用新的HttpClientHandler.?這可能是您的問題的原因以及降級工作的原因。

您可以通過使用 WinHttpHandler 作為參數實例化 HttpClient、將環境變量設置DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER為 false 或通過在代碼中調用以下內容來使用舊的 HttpHandler?:

AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler",?false);


查看完整回答
反對 回復 2021-07-31
?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

這是一個著名的“21 秒”超時問題......在 Azure 中,對于很少調用的服務(我的服務正在從 Azure 基礎結構調用外部服務)有幫助的是添加:

httpClient.DefaultRequestHeaders.ConnectionClose = true;


查看完整回答
反對 回復 2021-07-31
  • 3 回答
  • 0 關注
  • 231 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號