Исключение WebRequest в .NET - PullRequest
       13

Исключение WebRequest в .NET

4 голосов
/ 27 февраля 2010

Я использую этот фрагмент кода, который проверяет, существует ли файл, указанный в URL, и повторяю его каждые несколько секунд для каждого пользователя. Иногда (в основном, когда сайт использует большое количество пользователей) код не работает.

    [WebMethod()]
    public static string GetStatus(string URL)
    {
        bool completed = false;
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);

        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        {
            try
            {
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    completed = true;
                }
            }
            catch (Exception)
            {
                //Just don't do anything. Retry after few seconds
            }
        }

        return completed.ToString();
    }

Когда я просматриваю журналы событий Windows, появляются несколько ошибок:

Unable to read data from the transport connection. An existing connection was forcibly closed

The Operation has timed out

The remote host closed the connection. The error code is 0x800703E3

Когда я перезагружаю IIS, все работает нормально, пока в следующий раз это не произойдет.

1 Ответ

4 голосов
/ 27 февраля 2010

Вы помещаете try / catch внутри оператора using, в то время как метод request.GetResponse может выдать:

bool completed = false;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
try
{
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
        if (response.StatusCode == HttpStatusCode.OK)
        {
            completed = true;
        }
    }
}
catch (Exception)
{
    //Just don't do anything. Retry after few seconds
}
return completed.ToString();
...