web-dev-qa-db-fra.com

System.Net.Http.HttpClient vs Windows.Web.Http.HttpClient - Quelles sont les principales différences?

Lors du développement d'applications de bureau .NET 4.5 pour Windows, j'ai été utilisé pour utiliser System.Net.Http.HttpClient pour toutes les communications avec une API Web backend. Je suis en train de développer une application Windows Store et j'ai remarqué l'existence de Windows.Web.Http.HttpClient. J'ai cherché des informations sur les principales différences entre les deux clients mais sans aucune chance.

De MSDN Je sais que je devrais commencer à utiliser Windows.Web.Http.HttpClient dans mon application Windows Store depuis System.Net.Http.HttpClient peut être supprimé de l'API:

Remarque L'espace de noms System.Net.Http et System.Net.Http.Headers pourrait ne plus être disponible dans les futures versions de Windows pour être utilisé par les applications du Windows Store. À partir de Windows 8.1 et Windows Server 2012 R2, utilisez Windows.Web.Http.HttpClient dans l'espace de noms Windows.Web.Http et les espaces de noms Windows.Web.Http.Headers et Windows.Web.Http.Filters à la place pour les applications Windows Runtime .

Mais en dehors de ces informations, j'ai du mal à comprendre quelles sont les principales différences et quel est le principal avantage de l'utilisation de Windows.Web.Http.HttpClient? Qu'est-ce que cela ajoute que nous ne sommes pas déjà entrés dans System.Net.Http.HttpClient?

Les réponses appuyées par une documentation officielle sont grandement appréciées.

31
Lasse Christiansen

Il n'y a pas grand-chose à y trouver. Certaines choses qui me viennent à l'esprit:

  • La nouvelle API n'a pas de dépendances à certaines fonctions Windows de bas niveau, comme le fait l'API actuelle.
  • La nouvelle API est mieux à même de gérer de nouvelles méthodes liées au protocole HTTP, comme WebSockets, etc.

Certaines informations utiles peuvent être trouvées dans ce billet de blog qui faisait également référence à cette vidéo de construction . Ils parlent d'un meilleur contrôle du cache et d'un moyen d'ajouter des filtres pour l'authentification, un accès facile aux cookies, une reconnexion, etc.

14
Patrick Hofman

Windows.Web.Http est une API WinRT disponible dans tous les langages de programmation WinRT pris en charge: C #, VB, C++/CX et JavaScript. Cela permet l'option d'écrire le même code dans la langue de votre choix.

System.Net.Http est une API .NET et n'est disponible que pour les développeurs C # et VB.

Avantages de Windows.Web.Http

  • Les API WinRT sont écrites en code natif, ce qui se traduit par de meilleures performances.
  • Windows.Web.Http est au-dessus d'une pile HTTP Windows commune et réutilise les ressources déjà utilisées par d'autres composants Windows. System.Net.Http est une implémentation distincte du protocole HTTP qui n'est pas fréquemment utilisée par d'autres composants Windows. Ainsi, dans certains cas, vous économisez des ressources en choisissant Windows.Web.Http.
  • Windows.Web.Http a une meilleure intégration avec les types WinRT, tels que IInputStream, IOutputStream et IBuffer. Éviter les extensions .NET qui convertissent System.IO.Stream en IInputStream ou IOutputStream et System.Array en Windows.Storage.Streams.IBuffer peut améliorer les performances et économiser des ressources dans certains cas.
  • Windows.Web.Http a les nouvelles fonctionnalités, telles que prise en charge HTTP/2 .
  • Windows.Web.Http est basé sur COM et peut être utilisé par n'importe quel langage de programmation qui comprend COM.

Avantages de System.Net.Http

  • System.Net.Http est disponible depuis Windows 8 ou .NET 4.5 et Windows.Web.Http n'est disponible que depuis Windows 8.1 et Windows Phone 8.1.
  • Il est simple de porter le code WinRT en utilisant System.Net.Http vers ASP.NET ou Xamarin (bibliothèque de classes portable)
  • Projets Windows 8 et 8.1 ou projets de bureau: †
    • Les en-têtes d'authentification et les informations d'identification sont isolés par HttpClient ( exemple )
    • Conteneur de cookies isolé par HttpClient
    • Ne met pas en cache les réponses HTTP, donc les requêtes suivantes ne proviendront jamais du cache, un problème courant avec les serveurs qui ne définit pas le Cache-Control en-tête ( exemple )
    • Marche avec System.Net.NetworkCredential

† Pour les projets universels Windows (UWP), System.Net.Http est un wrapper au-dessus de Windows.Web.Http, comme décrit ici .

Pour en savoir plus: Démystifier les API HttpClient dans la plateforme Windows universelle

37
kiewic