簡體   English   中英

如何管理最大連接數,HttpClient,C#?

[英]How to manage max connection, HttpClient, C#?

我正在Windows服務上。 Windows服務的代碼非常簡單,但是方式卻很奇怪!
在Windows服務中,我應該每20秒調用一次WebApi並將結果保存到SQL數據庫中
我正在使用autofacProgram.cs上創建HttpClient實例

// HttpClient
builder.Register(ctx =>
{
    var httpClient = new HttpClient
    {
        BaseAddress = new Uri(StaticAssets.WebApiBaseAddress)
    };
    httpClient.DefaultRequestHeaders.Accept.Clear();
    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    return httpClient;
});

我從不手動處理httpClient實例。
在運行Windows服務大約8個小時后,IIS無法正常工作,我們無法再遠程訪問服務器,我們測試了Windows遠程桌面連接,VNC(服務器上有VNC)...
我們可以使用KVM遠程訪問服務器並停止Windows服務,然后一切都會恢復。 我從這里可以發現問題是由於連接號! 我不肯定?
我也發現以下內容:

<system.web>
 <processModel maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50"/>
 <httpRuntime minFreeThreads="704" minLocalRequestFreeThreads="608"/>
</system.web>

<system.net>
 <connectionManagement>
  <add address="[ProvideIPHere]" maxconnection="96"/>
 </connectionManagement>
</system.net>

https://support.microsoft.com/zh-cn/help/821268/contention-poor-performance-and-deadlocks-when-you-make-calls-to-web-s

HttpClient .Net Windows服務和IIS中管理最大連接的最佳實踐是什么?

基於谷歌搜索的解決方案:

1.將HttpClient定義為SingleTone,不要手動進行處理。
AutoFac使用如下所示的內容:

builder.Register(ctx =>
{
    var httpClient = new HttpClient
    {
        BaseAddress = new Uri('https://www.sample.com/')
    };
    httpClient.DefaultRequestHeaders.Accept.Clear();
    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    return httpClient;
}).SingleInstance();

.Net Core使用以下命令:

services.AddSingleton(provider =>
{
    var httpClient = new HttpClient
    {
        BaseAddress = new Uri('https://www.sample.com/')
    };
    httpClient.DefaultRequestHeaders.Accept.Clear();
    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    return httpClient;
});

2.在config文件中添加以下內容

<configuration>
    ....
    <system.web>
     <processModel maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50"/>
     <httpRuntime minFreeThreads="704" minLocalRequestFreeThreads="608"/>
    </system.web>

    <system.net>
     <connectionManagement>
      <add address="[ProvideIPHere]" maxconnection="96"/>
     </connectionManagement>
    </system.net>
</configuration>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM