System.Net.WebException: сервер совершил нарушение протокола

У меня есть следующий код для вызова, который, в свою очередь, возвращает xml:

private string Send(string url)
{
    try
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        {
            using (Stream stream = response.GetResponseStream())
            {
                using (StreamReader reader = new StreamReader(stream))
                {
                    return reader.ReadToEnd();
                }
            }
        }
    }
    catch (WebException ex)
    {
        var _status = ex.Status.ToString();
        if (ex.Status == WebExceptionStatus.ProtocolError)
        {
            _status = ((HttpWebResponse)ex.Response).StatusCode.ToString();
        }
        Trace.WriteLine(_status.ToString());
    }

    return "error";
}

В большинстве случаев (не всегда) я получаю

System.Net.WebException: сервер совершил нарушение протокола.

Раздел = ResponseStatusLine в System.Net.HttpWebRequest.GetResponse ()

выброшено исключение.

Я добавил это в свой App.config прямо в разделе <configuration>:

<system.net>
  <settings>
    <httpWebRequest useUnsafeHeaderParsing="true"/>
  </settings>
</system.net>

Но я продолжаю получать ошибку.


person keeg    schedule 07.10.2016    source источник
comment
Какого рода ваша цель / URL? http / https? Какой сервер находится в пункте назначения, просто любой http-сервер? Вы бы попытались использовать Fiddler, чтобы проверить, каковы шаги связи. Также см. stackoverflow.com/questions/2482715/   -  person gerleim    schedule 13.10.2016


Ответы (1)


Набор

request.KeepAlive = false;

http://www.webmonkeys.org.uk/2012/09/c-the-server-committed-a-protocol-violation-sectionresponsestatusline/#comment-60

Кроме того, значение конфигурации useUnsafeHeaderParsing, которое вы вставили, имеет значение false, когда вы должны установить для него значение true, если вы пытаетесь решить эту проблему.

person Bruce Dunwiddie    schedule 13.10.2016
comment
это ошибка вставки, на самом деле в коде установлено значение true. Я поправил. Спасибо - person keeg; 13.10.2016