Получение Удаленный сервер возвратил ошибку: (504) Тайм-аут шлюза для WebAPI - PullRequest
0 голосов
/ 15 января 2019

Я использую приведенный ниже код для вызова API из моего кода C # с помощью WebRequest:

public object GetData() 
{
 object response = "";
 string token = "EF232354";
 string baseUrl = ConfigurationManager.AppSettings["BaseURL"].ToString();
 string endPoint = ConfigurationManager.AppSettings["EndPoint"].ToString();

 var httpWebRequest = (HttpWebRequest) WebRequest.Create(baseUrl + endPoint);

 httpWebRequest.ContentType = "application/json";
 httpWebRequest.Method = HttpVerb.GET.ToString();
 httpWebRequest.Headers.Add("token", token);

 var httpResponse = (HttpWebResponse) httpWebRequest.GetResponse();
 Stream dataStream = httpResponse.GetResponseStream();
 StreamReader reader = new StreamReader(dataStream);

 using(JsonReader sdr = new JsonTextReader(reader)) 
 {
  JsonSerializer serializer = new JsonSerializer();
  response = serializer.Deserialize(sdr);
 }
  return response;
}

Иногда я получаю:

Сообщение: удаленный сервер возвратил ошибку: (504) Время ожидания шлюза.

Тип исключения: System.Net.WebException

А сколько запросов может сделать WebRequest за раз?

1 Ответ

0 голосов
/ 16 января 2019

Я адаптировал вопрос, чтобы продемонстрировать чтение в потоке памяти, когда заметил, что ответ не удаляется. С вероятностью 95% это будет вашей основной проблемой. Streams и StreamReader также доступны одноразово и должны быть заключены в использование замыканий ().

public object GetData() 
{
  object response = "";
  string token = "EF232354";
  string baseUrl = ConfigurationManager.AppSettings["BaseURL"].ToString();
  string endPoint = ConfigurationManager.AppSettings["EndPoint"].ToString();

  var httpWebRequest = (HttpWebRequest) WebRequest.Create(baseUrl + endPoint);

  httpWebRequest.ContentType = "application/json";
  httpWebRequest.Method = HttpVerb.GET.ToString();
  httpWebRequest.Headers.Add("token", token);

  using (var httpResponse = (HttpWebResponse) httpWebRequest.GetResponse())
  {
    using (Stream dataStream = httpResponse.GetResponseStream())
    {
      using (StreamReader reader = new StreamReader(dataStream))
      {
        using(JsonReader sdr = new JsonTextReader(reader)) 
        {
          JsonSerializer serializer = new JsonSerializer();
          response = serializer.Deserialize(sdr);
        }
        return response;
      }
    }
    httpResponse.Close(); // For good measure. *should* be covered by Dispose.
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...