我正在寻找最好的方法来测试,如果一个网站是活着从C#应用程序。

背景

我应用程序包含一个 它UI, ,后台 WCF服务 和一个 网站 公布的内容的用户界面和其他消费者。防止情况UI启动和失败的正常工作,因为缺少WCF或服务的网站正在下来,我增加了一个应用程序的启动检查,以确保所有一切都还活着。

该应用程序是被编写C#.净3.5、Visual Studio2008

目前的解决方案

目前我在做一个网请求测试页在网站上,将些合格实习考试的网站,然后显示结果。

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

我假设,如果没有例外情况thown期间这个电话然后一切都很好和可以开始。

的问题

这是最简单的、正确的方式或是有其他一些偷偷摸摸的话,我不知道关于在C#或一个更好的方式来做到这一点。

有帮助吗?

解决方案

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

其他提示

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

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

来自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);
}

假设WCF服务和网站住在同一网页应用程序,可以使用"地位"的服务,返回的应用程序的状态。你可能想要做一些如下:

  • 测试数据库的建立和运行(良好的连接串服务,等等。)
  • 测试该网站的工作(究竟如何,取决于网站)
  • 测试WCF工作(如何,完全取决于您的执行情况)
  • 额外的奖励:你可以回返的一些版本控制的信息服务,如果你需要支持不同版本的未来。

然后,您可以创建一个客户在获胜。形式的应用程序的服务.如果WS也没有响应(即你会得到一些例外的援引)之后的网站下(如"大错误").
如果WS作出响应,可以分析其结果和确保一切工作,或者如果有什么打破,返回更多的信息。

我们今天可以使用 HttpClient()

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

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

解决方案来自:如何查看如果网站在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;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top