3

私のWindows Formsアプリケーション (起動時) では、ping コマンドを使用して、インターネット接続とSQL Serverの両方が動作しているかどうかを確認しています。

.NET Framework 2.0 で上記のタスクを達成するために使用すべき「より良い」方法コマンドはありますか?

4

6 に答える 6

7

接続が機能しているかどうかを確認するには、SQL サーバーに小さくて簡単なリクエストを送信するだけです。それ以外に、接続がタイムアウトしたり失敗した場合に、適切に処理された例外を開始しないのはなぜですか?

于 2009-10-15T09:25:30.903 に答える
2

Ping は、パケットが宛先に移動できることを確認するためにのみ使用できますが、実際のサーバーが動作しているかどうかを確認するのには適していません。

サーバーが SNMP を提供するように構成されている場合は、SNMP 情報を取得して、サーバーが動作しているかどうかを確認することをお勧めします。

ただし、SNMP のプログラミングは簡単な作業ではありません。メリットが本当に必要な場合は、それを選択してください。

于 2009-10-15T09:24:05.193 に答える
2

サンプルコードは次のとおりです。

private bool IsInternetAvailable()
        {
            bool ret = false;

            try
            {
                HttpWebRequest req = (HttpWebRequest)
            HttpWebRequest.Create("http://www.yourremoteserver.com/");
                HttpWebResponse res 
            = (HttpWebResponse)req.GetResponse();
                if (res.StatusCode == HttpStatusCode.OK)
                {
                    ret = true;
                }
                else
                {
                    ret = false;
                }
                res.Close();
            }
            catch
            {
                ret = false;
            }

            return ret;
        }

出典:自分のブログ

SQL Server の場合は、「接続を試す」ことをお勧めします。

于 2009-10-15T09:47:52.127 に答える
1

コマンドを実行せずにネットワークと MS-SQL Server を確認するには:

// Setup a timer to call as needed
public bool IsSqlConnectionOpen(string connectionString)
{
    bool open = false;
    using (var connection = new SqlConnection(connectionString))
    {
        try
        {
            connection.Open();
            open = true;
            connection.Close();
        }
        catch (SqlException e)
        {
            // log e.ToString()
        }
    }
    return open;
}

SQL Server のバージョンを取得するために使用するコードを変更しました。

更新: MSDNによると、mattcodes は接続プーリングに関する良い点を提起します

フェイルオーバーなどの致命的なエラーが発生すると、プールは自動的にクリアされます。

SqlConnection オブジェクトが要求されると、使用可能な接続が使用可能な場合にプールから取得されます。接続を使用可能にするには、接続が未使用であり、一致するトランザクション コンテキストを持っているか、トランザクション コンテキストとの関連付けが解除されていて、サーバーへの有効なリンクが必要です。

それでも十分でない場合Pooling=falseは、接続文字列を設定して確認してください。

于 2009-10-15T10:02:23.023 に答える
0

これを起動ロジックとして保持するように十分注意してください。このようなことが、他にも多くの楽しい問題があるハートビート ロジックに退化しているのを見てきました。その 1 つは、アプリで実行中のインスタンスが多数ある場合です。アプリが大規模な環境で使用され、数千のインスタンスが実行されている可能性がある場合、ハートビート ロジックがネットワークとサーバーの負荷に追加される可能性があります。または、ハートビート間隔が構成可能で、誰かがそれをゼロまたはその他のクレイジーな値に設定する場合があります。

もう1つのポイントは、DBサーバーの質問がサーバー上での時間である場合に、これを組み合わせて見たことです。つまり、GetDate() を選択します。

これは 2 つのことを行います。最初に、応答が得られれば、サーバーとネットワークが機能していることがわかります。次に、時間が重要な操作がある場合は、クライアント マシンと DB サーバー間のクロック スキューを測定できます。時にはこれを知っておくことが重要です。

于 2009-10-15T16:29:51.850 に答える
0

インターネット接続をテストするには。System.Net には便利な機能がたくさんあります。HttpWebRequest関数は Web サイトの読み込みを試行し、接続のテストに使用する詳細な応答を取得します。

于 2009-10-15T09:29:44.373 に答える