Почему я получаю тайм-аут сервера при вызове API через HttpClient, но с Postman все в порядке? - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь сделать GET запрос к службе RESTful, но. NET HttpClient получает тайм-аут, но через Почтальон это возвращает ожидаемый ответ (ответ об ошибке, так как я еще не "вошел в систему") в течение нескольких секунд.

То, что я пробовал:

  1. Я проверил URL-адреса одинаковы, и они.
  2. Я подумал, что, возможно, Проблема заключается в автоматических заголовках почтальона, но после их установки в HttpClient я все равно получаю тайм-аут.
  3. Если я увеличу тайм-аут на HttpClient, я все равно получу тайм-аут с сервера ((504) Gateway Timeout ).
Client = new HttpClient(new HttpClientHandler()
{
    AutomaticDecompression = System.Net.DecompressionMethods.GZip
});
var objTask = Client.GetStringAsync(objUrl);
objTask.Wait();
strResponse = objTask.Result;
strResponse = Client.GetStringAsync(objUrl).Result;

Почему я получаю тайм-аут через HttpClient?

Примечание:

Наша WebApi вызывает нашу службу WCF, которая, в свою очередь, вызывает сторонний сервис RESTful через HttpClient --- по соображениям безопасности я не могу вызвать сторонний API напрямую с нашего контроллера WebApi. Сайт основан на. NET 4.0 Framework.

1 Ответ

0 голосов
/ 20 марта 2020

С помощью @jdweng и @ gunr2171 я понял, что проблема в том, что прокси-сервер хранится в App.Config Служб WCF. Если бы я закомментировал это, у меня не было бы проблемы времени ожидания.

Конструктор HttpClient может принимать HttpClientHandler, у которого есть свойство Proxy, где вы можете обойти локальный прокси как так:

return new HttpClient(new HttpClientHandler()
{
    AutomaticDecompression = System.Net.DecompressionMethods.GZip,
    Proxy = new WebProxy()
    {
        BypassProxyOnLocal = true
    }
})
{
    BaseAddress = new Uri("https:\\my.service")
};

...