Подтвердить что ты не робот

System.Net.Http.HttpClient vs Windows.Web.Http.HttpClient - В чем главные отличия?

При разработке настольных приложений .NET 4.5 для Windows я использовал для использования System.Net.Http.HttpClient для всей связи с базовым веб-API. Я сейчас разрабатываю приложение для Windows Store и заметил существование Windows.Web.Http.HttpClient. Я искал информацию о том, какие основные отличия между двумя клиентами, но без везения.

Из MSDN Я знаю, что я должен начать использовать Windows.Web.Http.HttpClient в моем приложении Windows Store, так как System.Net.Http.HttpClient может быть удален из API:

Примечание Пространство имен System.Net.Http и System.Net.Http.Headers может быть недоступно в будущих версиях Windows для использования приложениями Windows Store. Начиная с Windows 8.1 и Windows Server 2012 R2, используйте Windows.Web.Http.HttpClient в пространстве имен Windows.Web.Http и связанных с ними пространствах Windows.Web.Http.Headers и Windows.Web.Http.Filters вместо Windows Runtime.

Но, кроме этой информации, мне трудно определить, какие основные отличия и каково главное преимущество использования Windows.Web.Http.HttpClient? Что добавляет, что мы еще не получили в System.Net.Http.HttpClient?

Приветствуются ответы, подтверждаемые официальной документацией.

4b9b3361

Ответ 1

Об этом мало что можно найти. Некоторые вещи, которые приходят мне в голову:

  • Новый API не имеет зависимостей от некоторых низкоуровневых функций Windows, как это делает текущий API.
  • Новый API лучше способен обрабатывать новые методы, связанные с протоколом HTTP, такие как WebSockets и т.д.

Некоторая полезная информация содержится в этом сообщении в блоге, в котором также упоминается это видеоролик сборки. Они говорят о лучшем управлении кешем и способе добавления фильтров для аутентификации, простого доступа к файлам cookie, повторного подключения и т.д.

Ответ 2

Windows.Web.Http - это WinRT API, доступный на всех поддерживаемых языках программирования WinRT: С#, VB, С++/CX и JavaScript. Это позволяет использовать один и тот же код на выбранном вами языке.

System.Net.Http - это .NET API, и он доступен только для разработчиков С# и VB.

Преимущества Windows.Web.Http

  • API WinRT написаны в собственном коде, что обеспечивает лучшую производительность.
  • Windows.Web.Http находится поверх общего стека Windows HTTP и повторно использует ресурсы, которые уже используются другими компонентами Windows. System.Net.Http - это отдельная реализация HTTP-протокола, который не часто используется другими компонентами Windows. Таким образом, в некоторых случаях вы сохраняете ресурсы, выбирая Windows.Web.Http.
  • Windows.Web.Http имеет лучшую интеграцию с типами WinRT, такими как IInputStream, IOutputStream и IBuffer. Избегайте расширений .NET, которые конвертируют System.IO.Stream в IInputStream или IOutputStream и System.Array в Windows.Storage.Streams.IBuffer, могут улучшить производительность и сэкономить ресурсы в некоторых случаях.
  • У 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.
  • Прямо переносить код WinRT с помощью System.Net.Http в ASP.NET или Xamarin (Portable Class Library)
  • Проекты для Windows 8 и 8.1 или настольные проекты: †
    • Заголовки и учетные данные аутентификации изолированы за HttpClient (пример)
    • Контейнер cookie, выделенный за HttpClient
    • Не кэширует HTTP-ответы, поэтому последующие запросы никогда не будут поступать из кеша, общая проблема с серверами, которые не устанавливают правильный заголовок Cache-Control () )
    • Работает с System.Net.NetworkCredential

† Для универсальных проектов Windows (UWP) System.Net.Http является оболочкой поверх Windows.Web.Http, как описано здесь.

Дальнейшее чтение: Демистификация API-интерфейсов HttpClient на универсальной платформе Windows