複数のサーバーにあるサービスのHTTPステータスを監視したいと思い、
表をループで処理する仕組みを作っていました。
未試験ですが、ざっと以下のようなコードです。
実装時、無応答になることがあったので、もしやと思い、Disposeのコードを追加。
さらっと、流れました。
確か、HTTPだと同時通信数が決まってましたよね。
IDisposeインターフェースを持つオブジェクトは、終わったらきちんと破棄しようと思いました。
System.Data.DataTable dt;
if (this.dataGridView1.DataSource != null)
{
dt = (System.Data.DataTable)this.dataGridView1.DataSource;
foreach (DataRow dr in dt.Rows)
{
HttpWebResponse res = null;
try
{
res = null;
req = WebRequest.Create(new Uri(dr["LOGIN_URL"].ToString())) as HttpWebRequest;
res = (HttpWebResponse)req.GetResponse();
dr["STATUS"] = res.StatusCode.ToString();
res.Dispose();
}
catch (WebException ex)
{
//HTTPプロトコルエラーかどうか調べる
if (ex.Status == System.Net.WebExceptionStatus.ProtocolError)
{
System.Net.HttpWebResponse errres = (System.Net.HttpWebResponse)ex.Response;
dr["STATUS"] = errres.StatusCode;
}
}
finally
{
}
}
dt.AcceptChanges();
}