Проблема с производительностью: .NET HttpClient Ответ медленно - PullRequest
0 голосов
/ 24 декабря 2018

Проблема:

Я использую .NET Class HttpClient для выполнения запросов к URL-адресу конечной точки.

Мой код:

using (HttpClient apiClient1 = new HttpClient())
{
    apiClient.GetAsync(apiUrl).Result;
}

Идентифицированная проблема:

Если я использую блок using, я открываю несколько соединений, приводит к socketExceptions.

Код My Above изменен на:

public class RequestController: ApiController
{
    private static HttpClient apiClient = new HttpClient();

    [HttpPost]
    public  dynamic GetWebApiData([FromBody] ParamData params)
    {
           var resultContent = apiClient.GetAsync(apiUrl).Result.Content;
           return Newtonsoft.Json.JsonConvert.DeserializeObject<object>(resultContent.ReadAsStringAsync().Result);
    }
}

Результат выполнения кода выше после ввода HttpClient в виде static выглядит следующим образом:

  1. Установлено только одно соединение.

  2. Для каждого запроса я ищу сокращение времени отклика на 200 миллисекунд.

Что мне нужно:

Я хочу совершать одновременные звонки как минимум на 50 звонков в конечную точку с высокоскоростным ответом.

Пожалуйста, помогите мне с этим сценарием.

1 Ответ

0 голосов
/ 24 декабря 2018

Используйте асинхронный API и прекратите звонить .Result, блокируя звонки.

public class RequestController: ApiController {
    private static HttpClient apiClient = new HttpClient();

    [HttpPost]
    public async Task<IHttpActionResult> GetWebApiData([FromBody] ParamData data) {
        var response = await apiClient.GetAsync(apiUrl);
        var resultContent = response.Content;
        var model = await resultContent.ReadAsAsync<dynamic>();
        return Ok(model);
    }
}
...