Должен ли я использовать HttpClient для каждой функции или один для всего приложения?

1

Я создаю.NET-оболочку для некоторого API типа REST. Я использую HttpClient для связи (отправка/получение Json). Существует много асинхронных методов.

Проверка осуществляется через файл cookie, который я получаю и храня в cookiecontainer. Должен ли я иметь отдельный httpclient для каждой функции или одного глобального httpClient? Если один для каждой функции отдельно, то какой лучший способ делиться файлами cookiecontainer и настраиваемыми заголовками, которые привязаны к каждому запросу?

Теги:
httpclient
web-services

2 ответа

0
Лучший ответ

Определенно за функцию, в using утверждении. Пользовательские заголовки могут храниться в статической переменной, если они только считываются. Контейнер cookie, вероятно, потребует блокировки при работе с любыми членами экземпляра.

  • 0
    Таким образом, в каждом блоке использования мне нужно создавать заголовки и атаковать cookie? Или я должен создать «фабричную» функцию, которая будет создавать новые экземпляры WebClients и автоматически добавлять файлы cookie в контейнер и заголовки cookie? Что если я хочу поделиться всеми куки-файлами между всеми HttpClients?
  • 0
    Фабричная функция, которая автоматически создала бы HttpClient с заголовками по умолчанию, кажется, это был бы хороший способ сделать это. Что касается общего контейнера cookie, это может быть сложно, и я не могу точно сказать, как это должно быть реализовано. Я нашел этот ТАК вопрос, но он в значительной степени повторяет то, что я уже сказал: stackoverflow.com/questions/9911744/…
Показать ещё 2 комментария
1

Я предлагаю сохранить номер так же, как API, который вы вызываете (так я закодировал мой), то есть, если вы звоните в Twitter API, просто держите один экземпляр HttpClient для этого, и если вы получаете доступ к API Facebook в в то же время, держите еще один для этого.

Имейте в виду, что некоторые метаданные не могут быть изменены после создания HttpClient (например, DefaultRequestHeaders), что имеет смысл, поскольку HttpClient предназначен для повторного использования для совершения нескольких вызовов (например, для куки файлов или для обмена информацией с помощью Auth).

  • 0
    Итак, вы предлагаете использовать шаблон Singletone для HttpClient? У вас есть метод, который всегда возвращает мне ссылку на HttpClient? Таким образом, один клиент на весь API? Я до сих пор не уверен, что это правильный вариант. Другие люди предложили иметь один httpClient на действие и иметь фабрику httpClients. Я должен исследовать, что является недостатком, чтобы иметь один на приложение.
  • 0
    @ Ой, Singleton означает, что у вас есть только один экземпляр HttpClient для всего приложения. Если вы получаете доступ к различным API, хранить экземпляр HttpClient для каждого из них удобнее. Я сделал бы это для per function только если это не используется часто. Если вы используете HttpClient для доступа к своей базе данных, нет смысла многократно создавать одно и то же снова и снова, однако, если вы просто запускаете задание cron, то просто выполняйте его для каждой функции.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню