BT

.NETのHttpClientの修正

| 作者: Jonathan Allen フォローする 612 人のフォロワー , 翻訳者 編集部T フォローする 1 人のフォロワー 投稿日 2018年3月5日. 推定読書時間: 3 分 |

原文(投稿日:2018/03/01)へのリンク

読者の皆様へ:ノイズを減らすための一連の機能を開発しました。関心のあるトピックについて電子メールとWeb通知を受け取ることができます新機能の詳細をご覧ください。

2016年に報告したように、.NETのHttpClientには深刻な問題がある。.NET Core 2.1にHttpClientFactoryを導入したことで、これらの問題のいくつかが軽減された。

HttpClientの基本的な問題は、使用直後に廃棄されるかのような、呼び出し単位のリソースのように見えることである。実際には、宛先サーバごとに1回作成され、アプリケーションの生存中は保持される。DNSキャッシュをクリアする必要がある場合などは除く。

新しいHttpClientFactoryを使用すると、アプリケーションの起動時にHttpClientを事前設定できる。各設定に名前が付けられているため、正しい設定でHttpClientを要求するのが容易になる。名前のない設定も、カスタム設定が不要な場合に提供される。

文字列は間違いを起こしやすいため、HttpClientの設定に特定のタイプでキーを付けることができる。たとえば、GitHubServiceクラスの設定を作成できる。DIフレームワークによって、GitHubServiceのインスタンスが、デフォルト設定ではなく、その設定を使ったHttpClientと共に提供されるようになる。

HttpClientを管理するこの新しいフレームワークでは、HttpClientを使用するための基本的なルールの変更はない。HttpClientを破棄することは依然として危険である。DNSキャッシュの問題に関して、Karel Zikmund氏は次のように述べている。

私たちは、ManagedHandlerで直接、DNS変更の問題に対処するための設計について積極的に検討しています。現在、DNS TTLサポート(#24257)またはConnectionLeaseTimeoutに似たAPI(#26331)の2つのオプションを検討しています。DNS変更のシナリオが2.1タイムフレームのHttpClientFactory機能との組み合わせで対処されることを今後確認してきます。

メッセージハンドラと自動リトライ

HttpClientのほとんど知られていない機能は、メッセージハンドラを追加する機能である。追加設定なしで、HttpClientHandlerは、自動リダイレクトを許可するかどうか、どのCookieコンテナを使用するか、どのように事前認証の動作させるか、などの機能を制御する。

DelegatingHandlerのサブクラスを実装することで、この機能をさらに拡張できる。Channel 9のデモンストレーションでは、Daniel Roth氏が簡単なリトライハンドラの作成方法を示している。

HttpClientFactoryは、開発者がHttpClient設定の一部としてHttpClientHandlerをインクルードできるようにすることで、この機能を補完する。これは意図的にDIフレンドリな方法で実施される。

SocketHttpHandler

HttpClientHandlerのサブシステムは動作を変更するためだけのものではない。HttpClientがネットワークで通信する方法を完全に置き換えることもできる。Microsoft社ではSocketHttpHandlerの導入により、これを活用している。これは、「libcurl(Linux用)とWinHTTP(Windows用)のプラットフォーム依存性」を排除した、「新規に1から作り上げられたマネージされたHttpClientHandler」である。この発表は下記のように続く。

プレビュー1では、次のいずれかの方法でSocketHTTPHandlerを使用するようにオプトインできます。

環境変数: COMPlus_UseManagedHttpClientHandler=true

AppContext: System.Net.Http.UseManagedHttpClientHandler=true

ASP.NETのソケットモードを有効にすることもできる。最終的には、現在のネイティブ実装がオプトインになっている状態がデフォルトになる可能性がある。

 
 

Rate this Article

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT