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
?
Приветствуются ответы, подтверждаемые официальной документацией.
Ответы
Ответ 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