配置時HttpClient,可能會遇到“套接字耗盡”問題。因此,標準建議是盡可能重用客戶端。
所以我很驚訝地發現官方 Blazor 模板 ( dotnet new blazorwasm) 有這個范圍工廠Program.cs:
builder.Services.AddScoped(sp =>
new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
我什至在使用專門檢查此類事情的IDisposableAnalyzers分析器庫,它警告用單個實體替換該行。
為什么模板是這樣寫的?
uj5u.com熱心網友回復:
這就是我發現的。
HttpClient由于套接字耗盡問題,長期以來一直建議重用一個。
但是 BlazorHttpClient不使用 TCP 進行連接,而是使用瀏覽器的 Fetch API。根據 MDN,Fetch API 是基于 JavaScript 的:
Fetch API 提供了一個 JavaScript 介面,用于訪問和操作 HTTP 管道的各個部分,例如請求和回應。它還提供了一個全域 fetch() 方法,該方法提供了一種簡單、合乎邏輯的方式來通過網路異步獲取資源。
所以最初的問題不存在,這意味著我們可以安全地使用任意數量的HttpClient實體。
這就是 Blazor 模板使用工廠創建多個實體的原因。
TL;DR:它應該是安全的。
我唯一擔心的是以上內容基于 Blazor 檔案,但框架檔案HttpClient并未提及 Blazor 的這種特殊行為。(我想知道這是如何作業的——也許 Blazor SDK 的實作HttpClient與服務器 SDK 不同?)
如果我的分析有誤,請告訴我。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/469483.html
標籤:C# asp.net 核心 西装外套 dotnet-httpclient blazor-webassembly
