12,796
回編集
18行目: | 18行目: | ||
==== HttpClientクラス ==== | ==== HttpClientクラス ==== | ||
<code>HttpClient</code>クラスのインスタンスの生成において、<code>IDisposable</code>インターフェースを実装しているので<code>using</code>ブロックで囲うものがある。<br> | <code>HttpClient</code>クラスのインスタンスの生成において、<code>IDisposable</code>インターフェースを実装しているので<code>using</code>ブロックで囲うものがある。<br> | ||
しかし、これは通信を実行するごとにソケットを開くことにより、大量のリソースを消費してリソースが枯渇する場合がある。<br> | |||
<br> | <br> | ||
以下の例では、http://aspnetmonsters.com に対して、GETを行う10リクエストを開く。<br> | |||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
using | // アンチパターン | ||
using System; | |||
using System.Net.Http; | |||
public class Program | |||
{ | { | ||
await client. | public static async Task Main(string[] args) | ||
{ | |||
for (var i = 0; i < 10; i++) | |||
{ | |||
using(var client = new HttpClient()) | |||
{ | |||
var result = await client.GetAsync("http://aspnetmonsters.com"); | |||
Console.WriteLine(result.StatusCode); | |||
} | |||
} | |||
Console.WriteLine("Connections done"); | |||
} | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
次に、アプリケーションを終了して、netstatコマンドを実行してPCのソケットの状態を確認する。<br> | |||
<br> | |||
状態は<code>TIME_WAIT</code>であり、WebサイトをホストしているPCへの接続が開かれている状態である。<br> | |||
これは、接続は閉じられているが、ネットワーク上で遅延が発生している可能性があるため、追加のパケットが送られてくるのを待つ状態である。<br> | |||
Proto Local Address Foreign Address State | |||
TCP 10.211.55.6:12050 waws-prod-bay-017:http TIME_WAIT | |||
TCP 10.211.55.6:12051 waws-prod-bay-017:http TIME_WAIT | |||
TCP 10.211.55.6:12053 waws-prod-bay-017:http TIME_WAIT | |||
TCP 10.211.55.6:12054 waws-prod-bay-017:http TIME_WAIT | |||
TCP 10.211.55.6:12055 waws-prod-bay-017:http TIME_WAIT | |||
TCP 10.211.55.6:12056 waws-prod-bay-017:http TIME_WAIT | |||
TCP 10.211.55.6:12057 waws-prod-bay-017:http TIME_WAIT | |||
TCP 10.211.55.6:12058 waws-prod-bay-017:http TIME_WAIT | |||
TCP 10.211.55.6:12059 waws-prod-bay-017:http TIME_WAIT | |||
TCP 10.211.55.6:12060 waws-prod-bay-017:http TIME_WAIT | |||
TCP 10.211.55.6:12061 waws-prod-bay-017:http TIME_WAIT | |||
TCP 10.211.55.6:12062 waws-prod-bay-017:http TIME_WAIT | |||
TCP 127.0.0.1:1695 SIMONTIMMS742B:1696 ESTABLISHED | |||
...略 | |||
<br> | |||
==== HttpRequestMessageクラス ==== | ==== HttpRequestMessageクラス ==== | ||
固定のリクエストヘッダや認証情報を付加した<code>HttpRequestMessage</code>クラスを使用する場合、共通の内部メソッドである<code>CreateRequest()</code>を使用する。<br> | 固定のリクエストヘッダや認証情報を付加した<code>HttpRequestMessage</code>クラスを使用する場合、共通の内部メソッドである<code>CreateRequest()</code>を使用する。<br> |