System.Net.WebException в консольном приложении

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

system.net.webexception время ожидания операции истекло на system.net.httpwebrequest.getresponse

Я установил тайм-аут как 15000 миллисекунд, то есть 15 секунд. Я смотрю на firebug, когда он запрашивал, и он сказал, что запрос был прерван, я не увидел код состояния. Но мне интересно, почему я получаю это ожидание, когда устанавливаю тайм-аут?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Net;


namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            WebRequest request = WebRequest.Create("http://MYSITE.com/A/P/LIB/22?encoding=UTF-8&b=100");
            request.Timeout = 15000;
            SmtpClient mailserver = null;
            try
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                if (response == null || response.StatusCode != HttpStatusCode.OK)
                {
                    MailMessage contactMsg = new MailMessage();
                    contactMsg.To.Add(new MailAddress("[email protected]"));
                    contactMsg.From = new MailAddress("[email protected]");
                    contactMsg.Subject = "Site is not responding!";
                    contactMsg.IsBodyHtml = true;
                    contactMsg.Body = "<html><body><h1>The Site is not responding</h1> " +
                        "Please check the server. <br /><br />Thank You</body></html>";
                    mailserver = new SmtpClient("smtp.mysite.com", 25);
                    //Setup email message
                    try
                    {
                        mailserver.Send(contactMsg);
                        mailserver.Dispose();
                    }
                    catch (Exception exc)
                    {
                        Console.WriteLine(exc.ToString());
                        mailserver.Dispose();
                    }
                    Console.WriteLine("Site is Down!");
                }
                else
                {
                    Console.WriteLine("Site is Up!");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                mailserver.Dispose();
            }
        }
    }
}

person ios85    schedule 06.01.2012    source источник


Ответы (1)


Ваш сайт не отвечает в течение 15 секунд, поэтому создается исключение WebException. Timeout предназначен для создания исключения.

Свойство Timeout указывает промежуток времени в миллисекундах до истечения времени ожидания запроса и создания исключения WebException. Свойство Timeout влияет только на синхронные запросы, сделанные с помощью метода GetResponse. Чтобы отсрочить асинхронные запросы, используйте метод Abort.

(MSDN)

person keyboardP    schedule 06.01.2012
comment
Поэтому мне нужно обработать это исключение так же, как если бы статус не был возвращен как ОК, правильно? - person ios85; 06.01.2012
comment
Да, исключение, по сути, говорит о том, что сервер не отвечает в пределах заданного лимита. Причина отсутствия ответа может быть разной. Вы можете попытаться получить http-код из возникшего исключения. См. Этот ответ: stackoverflow.com/questions/3614034/ < / а> - person keyboardP; 06.01.2012