从C#应用程序测试网站是否存活

时间:2008-10-09 11:50:44

标签: c# webrequest

我正在寻找测试网站是否在C#应用程序中存活的最佳方法。

背景

我的应用程序包含 Winforms UI ,后端 WCF服务网站,用于向UI和其他消费者发布内容。为了防止由于缺少WCF服务或网站关闭而导致UI启动并且无法正常工作的情况,我添加了应用启动检查以确保所有内容都处于活动状态。

该应用程序是用C#,.NET 3.5,Visual Studio 2008编写的

当前解决方案

目前,我正在向网站上的测试页面发出Web请求,该测试页面将对网站进行测试,然后显示结果。

WebRequest request = WebRequest.Create("http://localhost/myContentSite/test.aspx");
WebResponse response = request.GetResponse();

我假设如果在此调用期间没有异常,那么一切都很好,UI可以启动。

问题

这是最简单,正确的方式,还是在C#中我还不知道其他一些偷偷摸摸的电话,或者是更好的方法。

7 个答案:

答案 0 :(得分:79)

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response == null || response.StatusCode != HttpStatusCode.OK)

答案 1 :(得分:19)

使用WebResponse时请确保关闭响应流即(.close)否则在重复执行后会挂起机器。 例如

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sURL);
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
// your code here
response.Close();

答案 2 :(得分:9)

来自CodePlex上的NDiagnostics项目...

public override bool WebSiteIsAvailable(string Url)
{
  string Message = string.Empty;
  HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);

  // Set the credentials to the current user account
  request.Credentials = System.Net.CredentialCache.DefaultCredentials;
  request.Method = "GET";

  try
  {
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
      // Do nothing; we're only testing to see if we can get the response
    }
  }
  catch (WebException ex)
  {
    Message += ((Message.Length > 0) ? "\n" : "") + ex.Message;
  }

  return (Message.Length == 0);
}

答案 3 :(得分:3)

假设WCF服务和网站位于同一个Web应用程序中,您可以使用返回应用程序状态的“Status”WebService。您可能想要执行以下某些操作:

  • 测试数据库已启动并正在运行(良好的连接字符串,服务已启动等等)
  • 测试网站是否正常运行(具体取决于网站)
  • 测试WCF是否正常工作(具体取决于您的实施)
  • 已添加奖励:如果您将来需要支持不同的版本,可以返回该服务的一些版本信息。

然后,在WebService的Win.Forms应用程序上创建一个客户端。如果WS没有响应(即你在调用时遇到一些异常),那么网站就会关闭(就像“一般错误”)。
如果WS响应,您可以解析结果并确保一切正常,或者如果某些内容被破坏,则返回更多信息。

答案 4 :(得分:2)

我们今天可以使用HttpClient()更新答案:

HttpClient Client = new HttpClient();
var result = await Client.GetAsync("https://stackoverflow.com");
int StatusCode = (int)result.StatusCode;

答案 5 :(得分:-2)

您需要检查状态代码是否正常(状态200)。

答案 6 :(得分:-4)

解决方案来自:How do you check if a website is online in C#?

var ping = new System.Net.NetworkInformation.Ping();

var result = ping.Send("https://www.stackoverflow.com");

if (result.Status != System.Net.NetworkInformation.IPStatus.Success)
    return;