web-dev-qa-db-ja.com

WebサイトがC#アプリケーションから生きているかどうかをテストする

WebサイトがC#アプリケーションから生きているかどうかをテストする最良の方法を探しています。

バックグラウンド

私のアプリケーションは、Winforms UI、バックエンドWCFサービス、およびUIと他のコンシューマーにコンテンツを公開するためのwebsiteで構成されています。 UIが起動し、WCFサービスまたはWebサイトがダウンしているために正常に動作しない状況を防ぐために、すべての機能が動作していることを確認するアプリ起動チェックを追加しました。

アプリケーションはC#、. NET 3.5、Visual Studio 2008で記述されています

現在のソリューション

現在、WebサイトのテストページにWebリクエストを送信し、Webサイトをテストして、結果を表示します。

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

この呼び出し中に例外がスローされない場合、すべてが正常であり、UIを起動できると想定しています。

質問

これは最も簡単で正しい方法ですか、それとも私がC#で知らない他の卑劣な呼び出しか、それを行うより良い方法ですか?.

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

WebResponseを使用している間は、応答ストリームを必ず閉じてください(つまり、.close)。そうしないと、特定の繰り返し実行後にマシンがハングします。例えば

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

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);
}
9
ZombieSheep

WCFサービスとWebサイトが同じWebアプリに存在すると仮定すると、アプリケーションステータスを返す「ステータス」WebServiceを使用できます。おそらく次のいくつかを実行する必要があります。

  • データベースが稼働していることをテストします(良好な接続文字列、サービスが稼働しているなど)。
  • Webサイトが機能していることをテストします(Webサイトにどの程度正確に依存するか)
  • WCFが機能していることをテストします(実装にどの程度正確に依存するか)
  • 追加ボーナス:将来異なるリリースをサポートする必要がある場合、サービスのバージョン情報を返すことができます。

次に、WebServiceのWin.Formsアプリでクライアントを作成します。 WSが応答しない場合(つまり、起動時に例外が発生する場合)、Webサイトはダウンしています(「一般的なエラー」など)。

3
Sklivvz

今日は HttpClient() を使用して回答を更新できます。

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