Я использую следующий метод для получения ответов на веб-запросы.
private string SendRequest(string url)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
if (url != null && url.Length > 3 && url.EndsWith("xml"))
httpWebRequest.ContentType = "application/xml";
else
httpWebRequest.ContentType = "text/json";
httpWebRequest.Method = "GET";
httpWebRequest.Headers.Add("Authorization", "Basic " + svcCredentials);
try
{
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
return streamReader.ReadToEnd();
}
catch (Exception ex)
{
Helper.Log.Error(ex.Message);
return null;
}
}
Я заметил, что иногда (вероятно, 1 из 50 запросов) этот метод не возвращает полный ответ. Это происходит чаще, когда URL-адрес указывает на файл XML (например, https://www.mywebsite.com/thetargetfile.xml) или, по крайней мере, у меня еще есть проблема с другими типами URL-адресов.
В ответе на аналогичный вопрос было упомянуто, что:
[...] когда вы используете тот же код в интернете, серверы не
отправить все данные ответа в одном чанке, сервер может быть занят обработкой
другие запросы или может быть некоторая задержка в сети, то вы
получить ответные данные несколькими порциями.
Может ли мой StreamReader
выше не получить полный ответ? Я проверил ответы в веб-браузере и, похоже, получил весь документ XML.