System.Net.WebException: базовое соединение было закрыто: при получении произошла непредвиденная ошибка - PullRequest
2 голосов
/ 15 апреля 2009

Я пытаюсь создать метод в C #, чтобы вернуть строку HTML-содержимого веб-страниц из URL-адреса. Я пробовал несколько разных способов, но я получаю сообщение об ошибке System.Net.WebException: основное соединение было закрыто: неожиданная ошибка при получении.

Локально работает следующее, но появляется ошибка выше при работе на удаленном сервере:

  public static string WebPageRead(string url)
    {
        string result = String.Empty;

        WebResponse response = null;
        StreamReader reader = null;

        try
        {
            if (!String.IsNullOrEmpty(url))
            {
                HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
                request.Method = "GET";
                request.KeepAlive = false;
                request.ProtocolVersion = HttpVersion.Version10;

                response = request.GetResponse();
                reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                result = reader.ReadToEnd();
            }
        }
        catch (Exception exc)
        {
            throw exc;
        }
        finally
        {
            if (reader != null)
            {
                reader.Close();
            }

            if (response != null)
            {
                response.Close();
            }
        }

        return result;
    }

Ответы [ 3 ]

2 голосов
/ 15 апреля 2009

Возможно, это не проблема, но попробуйте следующее:

public static string WebPageRead(string url)
{
    if (String.IsNullOrEmpty(url))
    {
        return null;
    }

    HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
    if (request == null)
    {
        return null;
    }

    request.Method = "GET";
    request.KeepAlive = false;
    request.ProtocolVersion = HttpVersion.Version10;

    using (WebResponse response = request.GetResponse())
    {
        using (Stream stream = response.GetResponseStream())
        {
            using (StreamReader reader = 
                       new StreamReader(stream, Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }
    }
}

Я повторяю более ранний ответ, который предлагает вам попробовать это с известным хорошим URL. Я добавлю, что вы должны попробовать это с известным хорошим URL-адресом HTTP 1.1, закомментировав строку, которая устанавливает версию 1.0. Если это работает, то это значительно сужает ситуацию.

1 голос
/ 15 апреля 2009

Спасибо за ответы, проблема была связана с проблемой DNS на удаленном сервере! Просто, чтобы подтвердить, я пошел со следующим кодом в конце:

    public static string WebPageRead(string url)
    {
        string content = String.Empty;

        if (!String.IsNullOrEmpty(url))
        {
            HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;

            if (request != null)
            {
                request.Method = "GET";
                request.KeepAlive = false;
                request.ProtocolVersion = HttpVersion.Version10;

                try
                {
                    using (WebResponse response = request.GetResponse())
                    {
                        using (Stream stream = response.GetResponseStream())
                        {
                            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                            {
                                content = reader.ReadToEnd();
                            }
                        }
                    }
                }
                catch (Exception exc)
                {
                    throw exc;
                }
            }
        }                    

        return content;
    }
0 голосов
/ 15 апреля 2009

Была проблема, подобная этой, прежде чем она была решена путем открытия URL в IE на машине с проблемой. Затем IE спросит вас, хотите ли вы добавить URL-адрес в список безопасных сайтов. Добавьте его, и он работает для этого URL.

Это только одна из возможных причин. Серьезно, много других проблем может вызвать это. Помимо описанной выше проблемы, я нашел лучший способ решить эту проблему - просто перехватить исключение и повторить запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...