53

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

バックグラウンド

私のアプリケーションは、Winforms UI、バックエンドWCF サービス、およびコンテンツを UI や他の消費者に公開するためのWeb サイトで構成されています。WCF サービスが見つからないか、Web サイトがダウンしているために UI が起動しても正しく動作しないという状況を防ぐために、アプリの起動チェックを追加して、すべてが有効であることを確認しました。

アプリケーションは、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# で知らない他の卑劣な呼び出し、またはそれを行うためのより良い方法がありますか。

4

7 に答える 7

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

@Yanga が述べたように、HttpClient はおそらくこれを行うためのより一般的な方法です。

HttpClient client = new HttpClient();
var checkingResponse = await client.GetAsync(url);
if (!checkingResponse.IsSuccessStatusCode)
{
   return false;
}
于 2008-10-09T11:58:44.363 に答える
21

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

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sURL);
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
// your code here
response.Close();
于 2010-10-15T05:22:55.867 に答える
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);
}
于 2008-10-09T12:03:17.973 に答える
6

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

HttpClient Client = new HttpClient();
var result = await Client.GetAsync("https://stackoverflow.com");
int StatusCode = (int)result.StatusCode;
于 2018-02-14T16:30:29.717 に答える
3

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

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

次に、WebService の Win.Forms アプリでクライアントを作成します。WS が応答しない場合 (つまり、呼び出し時に何らかの例外が発生する場合)、Web サイトはダウンしています (「一般的なエラー」のように)。
WS が応答した場合は、結果を解析してすべてが機能していることを確認できます。何かが壊れている場合は、さらに情報を返すことができます。

于 2008-10-09T12:00:42.473 に答える
-3

解決策: Web サイトが 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;
于 2014-11-11T08:46:14.967 に答える
-3

OK (ステータス 200) のステータス コードを確認する必要があります。

于 2008-10-09T11:55:40.017 に答える