12,925
回編集
編集の要約なし |
|||
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 | class SampleClass | ||
{ | { | ||
private static readonly HttpClient httpclient = null; | private static readonly HttpClient httpclient = null; | ||
60行目: | 68行目: | ||
} | } | ||
public async Task<SomeResponse> | 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}"); | ||
... | |||
// ...略 | |||
} | } | ||
} | } |