我当前正在运行一个采用字符串(域名)并检查站点是否可用并将信息传递到我创建的Domain对象中的方法。当前,我遇到一个问题,其中一个站点已关闭,进而使应用程序崩溃。方法如下:
private Domain GetStatus(string x)
{
string status = "";
WebRequest req = HttpWebRequest.Create("http://www." + x);
WebResponse res = req.GetResponse();
HttpWebResponse response = (HttpWebResponse)res;
if ((int)response.StatusCode > 226 || response.StatusCode == HttpStatusCode.NotFound)
{
status = "ERROR: " + response.StatusCode.ToString();
}
else
{
status = "LIVE";
}
Domain temp = new Domain(x, status);
return temp;
}
最初的想法是response.StatusCode == HttpStatusCode.NotFound将处理这样的错误,但当前它正在WebResponse res = req.GetResponse();行崩溃。响应如下:
System.Net.WebException: 'The remote name could not be resolved: 'www.DOMAIN.com''
答案 0 :(得分:1)
该问题是由于您自己的代码引发了异常。
这可能是由于缺少Internet连接或dns解决问题(可能是由远程用户引起的)。
因此,如果远程服务器抛出错误,则无法访问,将得到HTTP 500 Internal Server Error
;您的代码将引发异常,您将需要处理该异常。
要解决此问题,您可以使用try/catch
块,如下所示:
private Domain GetStatus(string x)
{
string status = "";
try
{
WebRequest req = HttpWebRequest.Create("http://www." + x);
WebResponse res = req.GetResponse();
HttpWebResponse response = (HttpWebResponse)res;
if ((int)response.StatusCode > 226 ||
response.StatusCode == HttpStatusCode.NotFound)
{
status = "ERROR: " + response.StatusCode.ToString();
}
else
{
status = "LIVE";
}
}
catch (Exception e)
{
status = "ERROR: Something bad happend: " + e.ToString();
}
Domain temp = new Domain(x, status);
return temp;
}
无法解析远程名称
指示无法解析主机。
最可能的原因是您的Internet断开,域拼写错误或到域的路由出现故障(例如,在Intranet环境中)。
答案 1 :(得分:1)
HttpWebRequest都是关于HTTP协议的,这是一种商定的语言。
但是,如果另一端的人不存在,那么您应该如何期望他向您返回“ Hello”呢?
因此StatusCode
实际上仅是有关实际远程站点是否响应,响应状态根据请求资源是什么,是否为Success(200)?找不到(404)?未经授权(401)等。
异常表示,由于多种原因,我无法到达该站点。 StatusCode表示您请求的资源已返回此响应类型。
但是,如果对站点是否存在进行更实际的检查,是否正在查询静态页面且没有异常,则进行更健康的检查,将查询静态页面,您将始终被视为“健康”。意思是将返回200 OK响应。
所以这一切取决于 LIVE 对您(或使用它的客户)意味着什么。
是远程主机实际上正在接收请求,意味着没有异常。 或实际上,这意味着,他能够获取请求并向我返回我希望他返回的有效StatusCode响应(健康)。