複数のサーバーにあるサービスの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();
    }
0 件のコメント:
コメントを投稿