「C Sharpとネットワーク - HttpClient」の版間の差分

ナビゲーションに移動 検索に移動
編集の要約なし
49行目: 49行目:
<br>
<br>
複数の<code>HttoClient</code>クラスを使用して同時に実行する場合も、<code>HttpClient</code>はそのような使用を想定した設計となっている。<br>
複数の<code>HttoClient</code>クラスを使用して同時に実行する場合も、<code>HttpClient</code>はそのような使用を想定した設計となっている。<br>
<br>
<u>ただし、<code>static</code>キーワードを付加する場合、DNSの変更が反映されず、<code>HttpClient</code>クラスは(<code>HttpClientHandler</code>クラスを通じて)、ソケットが閉じるまでコネクションを無制限に使用し続ける。</u><br>
<code>HttpClient</code>クラスは、DNS TTLを尊重しており、デフォルトではこの値は1時間である。<br>
1時間過ぎれば、<code>HttpClient</code>クラスはDNSのエントリが有効であることを検証して、必要に応じて更新されたIPアドレスに対して新しいコネクションを作成する。<br>
<br>
そのため、<code>HttpClient</code>クラスのオブジェクトに、コネクションを自動的にリサイクルするように指定する。<br>
これは、アプリケーションの起動時において、アプリケーションで接続する全てのエンドポイント向けに1度だけ行う。 (エンドポイントが実行時に決まる場合は、決定する時に行う必要がある)<br>
時間は、1分〜5分程度に設定する方がよい。 (ホスト、ポート、スキーマが重要である)<br>
<br>
<br>
  <syntaxhighlight lang="c#">
  <syntaxhighlight lang="c#">
  class SmapleClass
  class SampleClass
  {
  {
     private static readonly HttpClient httpclient = null;
     private static readonly HttpClient httpclient = null;
60行目: 68行目:
     }
     }


     public async Task<SomeResponse> CallAPI()
     public async Task<SomeResponse> CallAPIAsync()
     {
     {
      var sp = ServicePointManager.FindServicePoint(new Uri("{URL}"));
      sp.ConnectionLeaseTimeout = 60 * 1000;  // コネクションのリサイクル時間 : 1分
       await httpclient.PostAsync("{URL}");
       await httpclient.PostAsync("{URL}");
       ...
       // ...
     }
     }
  }
  }

案内メニュー