121

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

Server = THESERVER \ TheInstance; Database = TheDatabase; User Id = TheUser; Password = ThePassword;

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

接続タイムアウトが期限切れになりました。ログイン前のハンドシェイク確認応答を消費しようとしたときにタイムアウト期間が経過しました。
これは、ログイン前のハンドシェイクが失敗したか、サーバーが時間内に応答できなかったことが原因である可能性があります。
このサーバーへの接続を試行している間に費やされた時間は-[ログイン前]初期化=42030; ハンドシェイク=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();
}

TheTableは小さく、78行だけです。

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

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

4

23 に答える 23

104

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

どうやら、いくつかの接続の試みは最終的にIPv4を使用し、他の試みはIPv6を使用しました。

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

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

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

  • SQLServer構成マネージャーを起動します
  • ノードSQLServerネットワーク構成を開きます
  • MYSQLINSTANCEのプロトコルを左クリックします
  • 右側のペインで、[TCP/IP]を右クリックします
  • [プロパティ]をクリックします
  • [IPアドレス]タブを選択します
  • リストされているIPアドレスごとに、[アクティブ]と[有効]の両方が[はい]になっていることを確認します。
于 2013-03-18T23:34:29.737 に答える
44

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

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

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

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

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

于 2016-02-12T03:51:01.967 に答える
20

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

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

  • リストされているIPアドレスごとに、TCP動的ポートが空でTCPポート= 1433(または他のポート)であることを確認します。
  • Windowsファイアウォールを開き、着信接続でポートが開いていることを確認します
于 2015-04-15T12:35:49.860 に答える
14

エンティティデータモデルを設定しているときに、Visual Studioからローカルネットワーク内のサーバーに(VPN経由で)接続しようとしても、同じ問題が発生しました。接続文字列を
設定するだけで解決できました。TransparentNetworkIPResolution=falseVS接続の追加ウィザードでは、[詳細設定]タブにあります。

于 2016-01-09T13:22:53.060 に答える
6

ホストされたサーバーに接続するときに同じハンドシェイクの問題が発生しました。

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

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

于 2013-09-20T10:33:40.703 に答える
4

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

于 2014-01-14T06:52:09.027 に答える
3

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

接続障害は、ターゲットコンピューターにインストールされた.NET Framework 4.7が原因で発生しました(Windows Updateの自動インストールがオンでした)-https://support.microsoft.com/?kbid= 3186539

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

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

于 2017-08-16T18:06:31.387 に答える
2

同じ問題が発生しました。SQLServerConfigurationManagerでポート1433とtcp/ipを開いて有効にし、サーバーを再起動して問題を解決しました。

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

于 2016-02-19T02:32:02.183 に答える
2

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

于 2019-02-28T14:00:48.243 に答える
2

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

MSDNの詳細

于 2019-04-01T15:12:36.043 に答える
2

これは、OPのエラーに対する別の解決策です...多くの原因があるため、多くの解決策があります。

MSSql2019のDeveloperEditionをインストールしました。デフォルトでは、インストールはロックされています...開発マシンだけで正常に実行されます。開発ボックス以外のマシンにインストールする場合は、防火壁ルールを更新する必要があります。

デフォルトでは...「MSSQLServer」のファイアウォールプロファイルはプライベートです

パブリックプロファイルやドメインプロファイルを有効にする必要がある場合があります。ドメインで認証を行う場合にのみ、ドメインを使用してください。
Windowsファイアウォールプロファイル
ファイアウォールプロファイル

また...すべてのIPアドレスを有効にするには(受け入れられた回答のように)、あなたがする必要があるのは

TCP/IPプロパティで[すべてリッスン]をyesに設定します

TCP/IPプロパティオプション
TCP/IPプロパティオプション

于 2021-06-04T15:29:16.117 に答える
1

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

接続タイムアウト=30を増やすことで解決しました。SQL Server Management Studio

于 2017-04-26T08:10:03.027 に答える
1

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

于 2017-07-06T21:22:09.377 に答える
1

抜本的なことをする前に、まず単純なSQLServerの再起動を試してください。修正する可能性があります。それは私のためにした

于 2019-04-30T11:34:11.667 に答える
1

残念ながら、VisualStudio内にインストールされているローカルSQLServerに問題があり、ここでは多くのソリューションがうまくいきませんでした。私がしなければならないのは、次の場所に移動してVisualStudioをリセットすることだけです。

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

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

その後、ローカルSQL Serverにアクセスして、ローカルSQLデータベースを操作できるようになりました。

于 2019-10-25T16:12:44.983 に答える
1

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

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

于 2020-07-06T19:56:25.473 に答える
0

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

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

于 2016-05-04T20:12:34.500 に答える
0

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

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

于 2016-11-29T03:21:51.717 に答える
0

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

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

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

于 2017-01-30T20:43:22.253 に答える
0

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

于 2018-09-12T22:14:58.450 に答える
0

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

于 2019-04-25T02:27:30.547 に答える
0

私は正確な問題を抱えていました、いくつかのsoultionを試しましたが機能しませんでした、最後にシステムを再起動しました、それはうまくいきました。

于 2019-12-02T11:39:10.020 に答える
0

C#では、これは私を夢中にさせていました。コードの一部で機能し、同じシングルトンを使用して1つの特定の領域で失敗していました。結局、私はファイルを読み取るために偽装を使用しており、昇格されたアクセス許可を使用していた「信頼できる接続」を使用してSQL接続を呼び出していました。その昇格されたアクセス許可ユーザーはSQLDBにアクセスできなかったため、そのメソッドでのみ失敗していました。なりすましの外に電話を移動しましたが、その後はうまくいきました。

于 2021-08-03T21:37:44.917 に答える