web-dev-qa-db-ja.com

System.Net.Http.HttpClientとWindows.Web.Http.HttpClient-主な違いは何ですか?

Windows用の.NET 4.5デスクトップアプリを開発するとき、バックエンドWeb APIとのすべての通信にSystem.Net.Http.HttpClientを使用するのに使用されました。現在、Windowsストアアプリを開発していますが、Windows.Web.Http.HttpClientの存在に気付きました。私は、2つのクライアント間の主な違いは何であるかについての情報を探しましたが、運はありません。

MSDNからWindows.Web.Http.HttpClientはAPIから削除される可能性があるため、WindowsストアアプリでSystem.Net.Http.HttpClientの使用を開始する必要があることを知っています。

System.Net.HttpおよびSystem.Net.Http.Headers名前空間は、Windowsストアアプリで使用するために、Windowsの将来のバージョンでは使用できなくなる可能性があります。 Windows 8.1およびWindows Server 2012 R2以降、Windowsランタイムアプリではなく、Windows.Web.Http名前空間のWindows.Web.Http.HttpClientと、関連するWindows.Web.Http.HeadersおよびWindows.Web.Http.Filters名前空間を使用します。 。

しかし、この情報は別として、Windows.Web.Http.HttpClientを使用する主な違いと主な利点を理解するのは困難です。 System.Net.Http.HttpClientにまだ入っていないことは何を追加しますか?

公式文書に裏付けられた回答は大歓迎です。

31

それについて見つけることはあまりありません。私の頭の中にあるいくつかのこと:

  • 新しいAPIは、現在のAPIのように、一部の低レベルWindows関数に依存していません。
  • 新しいAPIは、WebSocketなどのHTTPプロトコルに関連する新しいメソッドをより適切に処理できます。

いくつかの有用な情報は this blog post にあります。これは this Build video も参照しています。彼らは、キャッシュ制御の改善、および認証、Cookieへの簡単なアクセス、再接続などのためのフィルターを追加する方法について語っています。

14
Patrick Hofman

Windows.Web.Httpは、サポートされているすべてのWinRTプログラミング言語(C#、VB、C++/CX、およびJavaScript)で利用可能なWinRT APIです。これにより、選択した言語で同じコードを作成するオプションが有効になります。

System.Net.Httpは.NET APIであり、C#およびVB開発者のみが使用できます。

Windows.Web.Httpの利点

  • WinRT APIはネイティブコードで記述されているため、パフォーマンスが向上します。
  • Windows.Web.Httpは、一般的なWindows HTTPスタックの上にあり、他のWindowsコンポーネントで既に使用されているリソースを再利用します。 System.Net.Httpは、他のWindowsコンポーネントで頻繁に使用されないHTTPプロトコルの個別の実装です。そのため、場合によっては、Windows.Web.Httpを選択してリソースを節約します。
  • Windows.Web.Httpは、IInputStreamIOutputStreamIBufferなどのWinRT型との統合が向上しています。 System.IO.StreamIInputStreamに、またはIOutputStreamSystem.ArrayWindows.Storage.Streams.IBufferに変換する.NET拡張を避けると、パフォーマンスが向上し、リソースを節約できる場合があります。
  • Windows.Web.Httpには、 HTTP/2サポート などの新機能があります。
  • Windows.Web.Httpは [〜#〜] com [〜#〜] ベースであり、COMを理解する任意のプログラミング言語で使用できます。

System.Net.Httpの利点

  • System.Net.HttpはWindows 8または.NET 4.5以降で利用でき、Windows.Web.HttpはWindows 8.1およびWindows Phone 8.1以降でのみ利用可能です。
  • System.Net.Httpを使用してWinRTコードをASP.NETまたはXamarin(Portable Class Library)に移植するのは簡単です
  • Windows 8および8.1プロジェクトまたはデスクトッププロジェクト:†
    • 認証ヘッダーと認証情報はHttpClientごとに分離されます(
    • HttpClientごとに分離されたCookieコンテナ
    • HTTP応答をキャッシュしないため、後続のリクエストがキャッシュから送信されることはありません。これは、正しいCache-Controlヘッダーを設定しないサーバーの一般的な問題です( example
    • System.Net.NetworkCredentialで動作します

†Windows Universal Projects(UWP)の場合、System.Net.Httpは here で説明されているように、Windows.Web.Httpのラッパーです。

さらに読む: ユニバーサルWindowsプラットフォームでのHttpClient APIの説明

37
kiewic