StreamReader иногда не получает весь ответ - PullRequest
3 голосов
/ 21 мая 2019

Я использую следующий метод для получения ответов на веб-запросы.

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.

...