检查网站是否正常工作错误“无法解析远程名称”
本文关键字:程名 错误 是否 网站 常工作 工作 检查 | 更新日期: 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;
}
}