检查网站是否正常工作错误“无法解析远程名称”

本文关键字:程名 错误 是否 网站 常工作 工作 检查 | 更新日期: 2023-09-27 18:05:21

我试图检查一个网站是否在线并从mssql服务器2008获取url,如果说网站不工作,我的代码应该发送电子邮件。

它工作得很好,从服务器获取数据没有问题,但如果我试图检查一个不工作的网站,例如http://blabalabalabal.com,它给我一个错误,如:对象引用未设置为对象的实例。在这一行:if (response。= HttpStatusCode.OK)

我该如何解决这个问题?

        string connectionString = "Data Source=eur-vpc''sqlexpress;Integrated Security=True;Initial Catalog=Website";
        SqlConnection connection = new SqlConnection(connectionString);
        connection.Open();
        SiteeeID = Convert.ToInt32(listBox1.SelectedValue);
        string url = "select http from AyrintiSite where SiteID='" + SiteeeID + "'";
        connection.Close();
        ArrayList Sites = new ArrayList();
        using (SqlConnection cn = new SqlConnection(connectionString))
        {
            using (SqlCommand cm = new SqlCommand(url, cn))
            {
                cn.Open();
                SqlDataReader reader = cm.ExecuteReader();
                while (reader.Read())
                {
                    Sites.Add(reader.GetString(0));
                }
            }
        }
     for (int i = 0; i < Sites.Count; i++)
        {
            string url2 = Sites[i].ToString();
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url2));
          //  HttpWebResponse response = (HttpWebResponse)request.GetResponse();
           // string gelenYanit = response.StatusCode.ToString();
            var response = GetResponse(request);
            if (response.StatusCode != HttpStatusCode.OK)
            {
                    MailMessage mail = new MailMessage();
                    SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
                    mail.From = new MailAddress("blabla@gmail.com");
                    mail.To.Add("blabla2@yandex.com");
                    mail.Subject = "Website";
                    mail.Body += "Website is not working";
                    mail.IsBodyHtml = true;
                    SmtpServer.Port = 587;
                    SmtpServer.Credentials = new System.Net.NetworkCredential("blabla@gmail.com", "******");
                    SmtpServer.EnableSsl = true;
                    SmtpServer.Send(mail);
                    MessageBox.Show("Mail send");
                }
        }
    }
    private HttpWebResponse GetResponse(HttpWebRequest request)
    {
        try
        {
            return (HttpWebResponse)request.GetResponse();
        }
        catch (System.Net.WebException e)
        {
            if (e.Response == null)
            {
                MailMessage mail = new MailMessage();
                SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
                mail.From = new MailAddress("blabla@gmail.com");
                mail.To.Add("blabla2@yandex.com");
                mail.Subject = "Website";
                mail.Body += "Website is not working";
                mail.IsBodyHtml = true;
                SmtpServer.Port = 587;
                SmtpServer.Credentials = new System.Net.NetworkCredential("blabla@gmail.com", "********");
                SmtpServer.EnableSsl = true;
                SmtpServer.Send(mail);
                MessageBox.Show("Mail send");
            }
           return (HttpWebResponse)e.Response;
        }

检查网站是否正常工作错误“无法解析远程名称”

不是直接返回无效状态码,GetResponse方法可能会抛出System.Net.WebException,而WebException包含实际的错误码/响应。因此,将GetResponse调用包装在try-catch块中,或者甚至将其包装在方法中:

void YourMethod()
{
    string url2 = Sites[i].ToString();
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url2));
    HttpWebResponse response;
    string errorMessage;
    var gotResponse = TryGetResponse(request, out response, out errorMessage); // This is now a safe call
    if (!gotResponse || response.StatusCode != HttpStatusCode.OK)
    {
        // Send mail and use errorMessage
    }
}
private static bool TryGetResponse(HttpWebRequest request, out HttpWebResponse response, out string errorMessage)
{
    errorMessage = null; 
    try
    {
        response = (HttpWebResponse)request.GetResponse();
        // Everything ok, if we get here
        return true;
    }
    catch (WebException e)
    {
        if (e.Response == null)
        {
            response = null;
            if (e.Status == WebExceptionStatus.NameResolutionFailure)
            {
                errorMessage = "Name resolution failed.";
            }
            return false;
        }
        response = (HttpWebResponse)e.Response;
        return true;
    }
}