SQL Serverへの接続が機能することがある


99

ADO.Netアプリケーションは、ローカルネットワーク上の別のサーバーに接続できる場合があります。特定の接続試行が成功するか失敗するかはランダムに見えます。接続は次の形式の接続文字列を使用しています。

サーバー= THESERVER \ TheInstance;データベース= TheDatabase;ユーザーID = TheUser; Password = ThePassword;

返されるエラーは次のとおりです。

接続タイムアウトの期限が切れました。ログイン前のハンドシェイクの確認応答を消費しようとしたときにタイムアウト期間が経過しました。
これは、ログイン前のハンドシェイクが失敗したか、サーバーが時間内に応答できなかったことが原因である可能性があります。
このサーバーへの接続試行中に費やされた時間は-[Pre-Login] initialization = 42030;でした。handshake = 0;

.NETアプリケーションは、次のコードを実行する小さなテストアプリです。

using (SqlConnection conn = new SqlConnection(cs))
using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM TheTable", conn))
{
    conn.Open();
    int rowCount = (int)cmd.ExecuteScalar();
}

テーブルは小さく、わずか78行です。

ただし、.NETアプリケーションがこのエラーを受け取るのと同じマシンで、SSMSと接続文字列で指定されたユーザーID /パスワードを使用してTHESERVERに接続できます。

ADO.Netアプリからの接続が失敗し、SSMSからの同じ資格情報で成功するのはなぜですか?


回答:


92

のIPv4アドレスではTCP / IPが有効になっているが、IPv6アドレスでは無効であることがわかりましたTHESERVER

どうやら、一部の接続試行はIPv4を使用して終了し、他の接続試行はIPv6を使用したようです。

両方のIPバージョンでTCP / IPを有効にすると、問題が解決しました。

SSMSが機能したという事実は偶然であることが判明しました(最初の数回の試行はおそらくIPv4を使用したと思われます)。その後、SSMSを介して接続しようとすると、同じエラーメッセージが表示されます。

追加のIPアドレスに対してTCP / IPを有効にするには:

  • SQL Server構成マネージャーを起動する
  • ノードSQL Serverネットワーク構成を開きます
  • MYSQLINSTANCEのプロトコルを左クリック
  • 右側のペインで、TCP / IPを右クリックします。
  • プロパティをクリックします
  • [IPアドレス]タブを選択します
  • リストされた各IPアドレスについて、「アクティブ」と「有効」の両方が「はい」であることを確認します。

おかげで、これでエラーが解決しました。興味深いことに、すべてのIPアドレスが無効に設定されていました(以前は無効でした)。それは良いこれらは、私は設定が私の場合には手動で変更されているとは思わないように無効になることができるか知っているだろう...
マット

IPv6アドレスも手動で無効にしたことはありません。彼らがどのようにして無効になってしまったのかも不思議です。
エリックJ. 14

何らかの理由でIPv6を有効にできません。変更を有効にするにはサービスを再起動する必要があるとありますが、サービスを「はい」として保持することはありません。それをどのように進めるかについての手がかり
Salman

5
無効になっている個々のエントリが問題であるかどうかはわかりませんが、[プロトコル]タブには、すべてのIPをリッスンするようにSQLに指示する「listen all」のオーバーライドがあるためです。ドキュメントについては、次のリンクを参照してください。msdn.microsoft.com/en-us/library/dd981060.aspx
ShaneH

2
Azureでこの種のものを見ていると思います
tofutim '22 / 12/16

30

Iveには、最新のMicrosoft更新プログラム(2016年9月2日)と疑わしく同じエラーが出てきました。ASP.NETアプリケーションが「ログイン前のハンドシェイクの確認応答を消費しようとしている間にタイムアウト期間が経過しました」エラーを返している間に、SSMSは問題なく接続されていることがわかりました

私の解決策は、接続文字列に30秒の接続タイムアウトを追加することでした。例:

ConnectionString="Data Source=xyz;Initial Catalog=xyz;Integrated Security=True;Connection Timeout=30;"

私の状況で影響を受けた唯一の接続は、統合セキュリティを使用していた接続であり、接続する前にユーザーを偽装していました。SQL認証を使用した同じサーバーへの他の接続は正常に機能しました!

2つのテストシステム(個別のクライアントとSQLサーバー)が同時に影響を受け、マイクロソフトの更新が疑われました。


解決策をありがとう、私は同じ問題を抱えていました。VPN経由で統合セキュリティを使用して接続していて、デフォルトの接続タイムアウトをデフォルトの15秒から30秒に増やすと、問題が解決しました。
Mark G

1
setup.exeが新しいアプリケーションをインストールし、起動プロセスが新しいデータベースを作成しようとした後、SQL 2014 LocalDBでこの問題が発生しました。この修正により、ダミーを吐き出すことがなくなりました-ショーンに感謝します!
スコット

1
これで問題も解決しました。私の場合、VPN経由で接続し、hostsファイルにエントリを追加していました。この問題は、SSMSおよび.NETアプリケーションでホスト名を使用した場合にのみ発生しました。IPアドレスを使用した場合、問題は発生しませんでした。
Dan

この回答をありがとう!
Konrad、

17

私はエリックのように問題を解決しましたが、他のいくつかの変更を加えました:

  • SQL Server構成マネージャーを起動する
  • ノードSQL Serverネットワーク構成を開きます
  • MYSQLINSTANCEのプロトコルを左クリック
  • 右側のペインで、TCP / IPを右クリックします。
  • プロパティをクリックします
  • [IPアドレス]タブを選択します
  • リストされた各IPアドレスについて、「アクティブ」と「有効」の両方が「はい」であることを確認します。

そして

  • リストされた各IPアドレスについて、TCP動的ポートが空で、TCPポート= 1433(または他のポート)であることを確認します
  • Windowsファイアウォールを開き、ポートが受信接続で開いていることを確認します

解決策は私のために働いていません。Webサイトとデータベースを含むサーバーがありますが、この問題は発生しませんが、Webサーバーがデータベースサーバーから分離されているときにこの問題が見つかりました
Ibrahim Amer

11

Entity Data Modelのセットアップ中に、Visual Studioからローカルネットワーク(VPN経由)のサーバーに接続しようとすると、同じ問題が発生しました。接続文字列に
設定するだけで解決することができましたTransparentNetworkIPResolution=false。VS接続の追加ウィザードでは、[詳細設定]タブにあります。


3
設定はTransparentNetworkIPResolution = Falseです。これは.NET 4.6.1の新機能であり、デフォルトでオンになっています。これをfalseに設定すると、この機能によって作成される500ミリ秒のタイムアウトが削除されます。詳細については、以下blogs.msdn.microsoft.com/dataaccesstechnologies/2016/05/07/...
Jorriss

ありがとうございました。この問題に関する研究時間。この反応をお気に入りにする必要があります。@Jorrissのコメントは、その理由を理解するのに非常に役立ちました。ただし、正しいキーワードを使用するように回答を更新することもできます。ジョリスは正しいリファレンスを持っています。
TravisWhidden 2018

5

ホストされたサーバーへの接続時に、同じハンドシェイクの問題がありました。

ネットワークと共有センターを開き、ワイヤレスネットワーク接続でIPv6を有効にしました。

ここに画像の説明を入力してください


3

.NET Framework 3.5を使用してビルドされた実行可能ファイルは、最近いくつかのWindows Updateがインストールされた後(2017年8月7日の週)に、約半分の時間でこれらの接続の問題を報告し始めました。

接続障害は、ターゲットコンピューターにインストールされた.NET Framework 4.7によって引き起こされました(Windows Updatesの自動インストールはオンでした)-https://support.microsoft.com/?kbid = 3186539

.NET Framework 4.7をアンインストールすると、接続の問題が解決しました。

どうやら、.Net Framework 4.6.1には重大変更があります-TransparentNetworkIPResolution 記事に従って接続文字列を更新すると、フレームワークのバージョンをロールバックする必要なく問題が解決されました。


2

IPv6を有効にし、受信ポート1433のブロックを解除することにより、Windows Server 2012およびSQL Server 2012でこのエラーを修正しました。


1
質問には「たまにしか」が含まれているので、これは正解ではないと思います。ブロックされたポートはこれに関する質問に対処しません。
Magier 2016

2

私たちのケースでは、可用性クラスター構成が原因で問題が発生しました。この問題を解決するにMultiSubnetFailoverは、接続文字列をTrueに設定する必要がありました。

MSDNの詳細


1

同じ問題がありましたが、SQL Server構成マネージャーでポート1433とtcp / ipを開いて有効にし、サーバーを再起動することで解決できまし

ここに画像の説明を入力してください


1

上記の私の場合、すべてのオプションがすでにありました。

接続タイムアウト= 30を増やすことで解決しました。SQL Server管理スタジオ


1

私と同じように、問題を解決するのに時間がかかる前に、Windowsマシン再起動してみてください。他のすべてのソリューションを適用した後、私のために働きました。


0

SharePoint 2010から2013に移行したときにこの問題が発生しました。データベースサーバーがIP6をルーティングしないファイアウォールの反対側にあるため、データベースに接続するときにIP6を使用しようとして失敗したのではないかと思いました。

これで問題は解決したと思います。エラーは停止したようです。私がしたことは、SharePoint ServerのネットワークアダプターのIP6を無効にする(チェックを外す)ことです。


0

同じ問題がありましたが、静的IPアドレスを使用してリモートデータベースに接続していました。したがって、上記の解決策はどれも私の問題を解決しませんでした。

使用しているセキュリティログインに適切なユーザーマッピングを追加できなかったため、解決策は、ユーザーマッピング設定がデータベースにアクセスするように設定されていることを確認することでした。


0

ユーザーアカウントをブルートフォースで攻撃しようとしたIPアドレスをブロック/ブラックリストに登録することで、この問題を解決しました。SQLアクセスログで、多数の失敗したログイン試行がないかどうかを確認します(通常は「sa」アカウントの場合)。


0

私にとっては、Windowsサーバーのファイアウォールが、デフォルトのSQLサーバーポートであるポート1433をブロックしていることがわかりました。そのため、これらの接続を受け入れるための受信規則を追加することが私にとってはトリックでした。


0

私の場合、Persist Security Info=true接続文字列にユーザーとパスワードを含むパラメータが問題の原因です。パラメータを削除するかfalse、問題を解決するために設定します。


0

思い切った操作を行う前に、まずSQL Serverを再起動してみてください。修正するかもしれません。それは私のためにした


0

残念ながら、Visual Studio内にインストールされたローカルSQLサーバーに問題があり、ここでは多くの解決策がうまくいきませんでした。私がしなければならないのは、次のようにして、Visual Studioをリセットすることだけです。

コントロールパネル>プログラムと機能> Visual Studio Setup Launcher

[ その他 ]ボタンをクリックして、[ 修復 ]を選択します

その後、自分のローカルSQLサーバーにアクセスして、ローカルSQLデータベースを操作することができました。


0

最後のMicrosoft Windowsの更新後に自動的に解決する同じ問題がありましたが、誰かが同じ問題を経験しますか?


0

私は正確な問題を抱えており、いくつかの魂がうまくいかず、最後にシステムを再起動しましたが、うまくいきました。


0

「接続タイムアウト期限切れ」エラーを追跡するには、次のことを確認してください。

  • SQL Serverデータベースエンジンのインスタンスが稼働しています。
  • SQL Server Browserサービスが実行されています。
  • TCP / IPが有効になっています。
  • サーバー名が正しく入力されました。
  • アプリケーションサーバーからデータベースサーバーへのSQL Serverインスタンスの接続を確認する方法で説明したように、ネットワークの問題はありません。
  • データベースエンジンインスタンスのTCP / IPポートはファイアウォールによってブロックされていません。
  • クライアントとサーバーは、同じネットワークプロトコルを使用するように構成されています。

詳しくは、接続タイムアウトの期限切れを確認してください。ログイン前のハンドシェイクの確認応答を消費しようとしたときにタイムアウト期間が経過しました


これらのケースのどれが断続的なエラーと関係がありますか?
RonJohn

所属を開示するには編集してください。必須です。ありがとう。
Maximillian Laumeister

0

以前に受け入れられた回答にもかかわらず、ここに応答を追加します。私のシナリオがDNSであることが確認されたので。具体的には、ログイン前のハンドシェイク中のDNSタイムアウト。DNS名からIPアドレスに変更する(またはHostsファイルエントリを使用する)ことで、問題を回避できます。ただし、自動IP解決は失われます。

たとえば、接続文字列のタイムアウト値が1分間60に設定されていても、試行から数秒以内に発生します。指定されたタイムアウト期間の前にタイムアウトするのはなぜですか?DNS。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.