WebサイトがC#アプリケーションから生きているかどうかをテストする
-
06-07-2019 - |
質問
WebサイトがC#アプリケーションから生きているかどうかをテストする最良の方法を探しています。
背景
私のアプリケーションは、 Winforms UI 、バックエンド WCFサービス、およびUIや他のコンシューマーにコンテンツを公開するためのウェブサイトで構成されています。 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#でわからないその他の卑劣な呼び出しか、それを行うより良い方法ですか?
解決
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サービスとWebサイトが同じWebアプリに存在すると仮定すると、「ステータス」を使用できます。アプリケーションのステータスを返すWebService。おそらく次のいくつかを実行する必要があります。
- データベースが稼働していることをテストします(良好な接続文字列、サービスが稼働しているなど)
- ウェブサイトが機能していることをテストします(ウェブサイトにどれだけ正確に依存するか)
- WCFが機能していることをテストします(実装にどの程度依存するか)
- ボーナスの追加:将来異なるリリースをサポートする必要がある場合、サービスのバージョン情報を返すことができます。
次に、WebServiceのWin.Formsアプリでクライアントを作成します。 WSが応答しない場合(つまり、起動時に例外が発生する場合)、ウェブサイトはダウンしています(「一般エラー」など)。
WSが応答した場合、結果を解析してすべてが機能することを確認できます。何かが壊れている場合は、より多くの情報を返します。
今日、 HttpClient():
HttpClient Client = new HttpClient();
var result = await Client.GetAsync("https://stackoverflow.com");
int StatusCode = (int)result.StatusCode;
ステータスコードでOK(ステータス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;