16

次のコードを実行しようとすると、プログラムが無期限にハングします。理由はわかりませんが、この件に関しては他にも未回答のトピックがあるようです。ただし、IP\Web サイトに到達できない場合は、意図したとおりに機能します。

    private void DoStuff()
    {
        string connectionString = "Data Source=www.google.com;Connection Timeout=5";
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open(); //Hangs here indefinitely
            Console.WriteLine("Test");
        }
    }

たとえば、接続文字列を

connectionString = "Data Source=www.nonexistentsite.com;Connection Timeout=5";

その後、例外がスローされます。アクティブなサイトに対して例外をスローするにはどうすればよいですか? ...また、 Googleは明らかにテスト目的のためだけです。

編集 :

到達できないサーバー名または IP アドレスに接続しようとすると、この例外が発生します...

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

アップデート :

プログラムをしばらく実行させた後、通常は 3 ~ 5 分後に最終的にタイムアウトになり、上記のエラーが表示されます。どうすればタイムアウトを早くすることができますか?

4

2 に答える 2

6

Data Sourceなどの FQDN (完全修飾ドメイン名) を設定していexample.comて、DNS サーバーがこの FQDN を長時間解決できない場合、要求がハングアップすることは明らかです。アプリケーションを実行しているマシンが SQL サーバーに到達し、問題なく解決できることを確認してください。また、リクエストをブロックしている可能性のあるファイアウォールがないことを確認することもできます。

これらの症状の別の原因として、ADO.NET の接続プールを使い果たしたことが考えられます。これは、多数の遅い SQL クエリが並行して実行されており、それぞれがデータベースへの物理接続を使用している場合に発生する可能性があります。このプールで使用できる接続の数には制限があり、この制限に達すると、次の への呼び出しはconnection.Open()、使用可能な接続がプールに返されるまで待機する場合があります。

注: SQL サーバーに対して認証する方法を接続文字列で指定する必要がある場合もあります。connectionstrings.com他の例については、チェックアウトしてください。

これはすべて、質問に投稿した C# コードにまったく問題がないことを示しています。これは、ネットワーク管理者に知らせることができるネットワーク関連の問題のように見えます。

于 2013-05-08T20:14:42.830 に答える