サーバーとの接続は正常に確立されましたが、ログイン前のハンドシェイク中にエラーが発生しました


111

ローカル環境からProduction DBに接続しようとすると、次のエラーが発生します。

以前に本番データベースに接続できましたが、突然次のエラーが発生します。

サーバーとの接続は正常に確立されましたが、ログイン前のハンドシェイク中にエラーが発生しました。(プロバイダー:TCPプロバイダー、エラー:0-ハンドルが無効です。)

Production DBの接続文字列があるローカルPCでasp.net Webサイトを実行しようとしていましたが、以下はローカル環境で発生しているエラーのスタックトレースです。

>    at MyWebsiteDAL.clsForumQuestion.SelectAll(Int32 CurrentPageIndex, Int32 PageSize) in D:\EDrive\My WebSites\MyWebsite\MyWebsite\MyWebsiteDAL\clsForumQuestion.cs:line 821
       at CodeConnect.Default.Page_Load(Object sender, EventArgs e) in D:\EDrive\My WebSites\MyWebsite\MyWebsite\MyWebsite\Default.aspx.cs:line 100
       at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
       at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
       at System.Web.UI.Control.OnLoad(EventArgs e)
       at System.Web.UI.Control.LoadRecursive()
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

ここで何がうまくいかなかったのでしょうか?


どのDBMSに接続していますか?
ウィルA

1
ローカルPCからSSMSに接続できますか?この質問は、serverfault.comでより適切に質問されます
Will A

はい、接続できます。私が観察したのは突然働き始めました。
ジョードンウィリス

2
エラーの原因となっている根本的な問題はVisual StudioのAsp.net Cassiniだったので、この質問はStackOverflow(ServerFaultではなく)に属していると思います。既存のすべてのCassini(WebDev.WebServer.exe)インスタンスを停止し、アプリを再実行するとうまくいきました。
MikeTeeVee 2011

@ MikeTeeVee単純なWinFormアプリケーションでも同じ問題が発生しました。カッシーニは関与していません。
シルヴァン

回答:


154

解決

1)VS.Netソリューションをクリーンアップする

2)プロジェクトを再構築します。

3)IISをリセットする

4)プロジェクトを再度実行します。

基本的にはそれで私の問題は解決しましたが、私の場合、このエラーは発生せず、ローカル環境が突然上記のエラーを出し始めたので、私にとってはそのトリックワークかもしれません。


25
私も同様の問題を抱えていました(localhostも)。重要なポイントはポイント3にあったと思われます。私がしなければならなかったのは、VS WebServer(Cassini)のインスタンスを強制終了し、再構築してF5キーを押すことだけでした。それで解決しました。ご回答有難うございます。(ソリューションとしてマークすることを検討する必要があります)
アマディエール

1
この解決策も私にとってうまくいきました。私もアマディエールとまったく同じIISではなく、VS Webサーバー(カッシーニ)を使用していました。
Simon Lomax、2011

7
これは修正よりも回避策のように聞こえます。本当の問題は接続プーリングに関係があるのだろうか。
jrummell 2011年

2
今日もこれがあった。管理者のコマンドプロンプトからiisresetを実行するだけです。
Ian Kemp

6
この答えは、根本原因の分析に可能な指示をいくつか提供することで改善できます。回避策には価値がありますが、これが発生する理由と回避策が機能する理由を知っておくと便利です。
laindir 16

15

-作業を保存します
-Visual Studioを閉じてから-
プロジェクトを再度開きます

いつも私のために働きます。


29
これも私にとってはうまくいきましたが、再起動中にコーヒーを作ることですべての違いが生まれることがよくあります。
ED-209

同様の問題がありましたが、代わりにノードサーバーを使用していました。私はubuntu VMゲストでノードサーバーを実行していて、Windows 10 VMホストからアクセスしていました。VMを一時停止して保存し、次にWindows 10ホストをリセットしてから、VMを再び開くと動作するため、ローカルサーバーではなくWindowsに問題があると思いました。しかし、私は今、ローカルノードサーバーをリセットしてみたところ、それも同様に修正されました...
ご存知のとおり


9

メモリを大量に消費するプロセスを実行しているときに、このエラーが発生しました。システムがメモリ不足になり始めたとき、私はこの種のエラーに気づき始めました。RAMをより有効に利用するために、アルゴリズムを変更する必要がありました。

一部のスレッドがこの例外をスローしましたが、他のスレッドは以下をスローしました。

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

システムを変更すると、両方の問題が解消され、より少ないRAMで実行できるようになりました。


1
確認しました。ラップトップでparallel.foreachを使用して、C#からSQL Serverで集中処理を実行しました。私のメモリ使用量は最大でした。このエラーが発生するまで、コンピュータは15分間ほど使用できませんでした。
TheLegendaryCopyCoder 2016

8

同じ問題があり、データベースにセッションデータを格納していました。接続文字列にはEncrypt = Trueが含まれており、SQLクライアントにセキュア(SSL)モードでサーバーに接続するように指示したと想定し、これを削除すると役立ちました。


1
Windows Azure SQLデータベースを使用する場合は、このフラグが接続文字列に追加されます。他のPaaS / IaaS /サーバープロバイダーにも使用されると確信しています。
Parth Shah 2014


5

あなたはいくつかのことをチェックしたいかもしれません:

  1. 本番サーバーはリモート接続を許可します。(特に、DBAがいる場合、誰かがこれをオフにしている可能性があります)

  2. 接続文字列を確認してください。場合によっては、IPアドレスまたはサーバー名を使用していると、このエラーが発生することがあります。両方試してください。


4

私の場合、それは:

Persist Security Info=True;

削除する必要があった私の接続文字列で。一度やれば、もう問題はありませんでした。


3

リカルドの答えで述べたように、

netsh Winsock reset

私のために働いてきました、

PSあなたがIP設定を変更するインターネットダウンロードマネージャーまたはそのようなプログラムをインストールしている場合、このコマンドを実行した後、コンピューターを再起動するとIDMは設定を変更するように要求します。

それを願っています


3

データベースに接続できないという同様の問題があり、ここで推奨事項を試しました。

結局のところ、これは私にとってうまくいきました:

SQL Server構成マネージャーツールを使用して、SQL ServerクライアントコンピューターでTCP / IPおよび/または名前付きパイププロトコルを有効にしました。

  1. [スタート]ボタンをクリックし、[すべてのプログラム]をポイントして、[SQL Server構成マネージャー]をクリックします。
  2. [SQL Serverネットワーク構成]をクリックして展開し、[クライアントプロトコル]をクリックします。
  3. TCP / IPプロトコルを右クリックし、[有効にする]をクリックします。
  4. 名前付きパイププロトコルを右クリックし、[有効にする]をクリックします。
  5. 要求された場合は、SQLサーバーサービスを再起動します。

なぜ、またはいつこれが無効になったのか、私にはまだわかりません。


3

私の場合、このエラーはドットネットコアとで発生しましたMicrosoft.Data.SqlClient。解決策は;TrustServerCertificate=true、接続文字列の最後に追加することでした。


ありがとう、あなたは私を救った:)
DiPix

これが自己署名証明書を使用するときの問題でした
Geoff Gunter

2

私にとっての解決策は、ゾンビIISエクスプレスワーカープロセスを強制終了することです。

たとえば、タスクマネージャで検索してタスクを終了します。

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


1

私はこれと同じ問題を抱えていて、提案された修正でうまくいかなかった。次に、この記事に出くわし、Mirrhから、LSPをブロックするSendoriというプログラムに関するコメントを見ました。それが私のコンピューターにどうやって入ったかわからないが、それはあった、そしてそれを取り除くことは問題を修正した。

記事が機能しない場合は、プログラムを確認し、Sendoriが表示された場合はアンインストールしてください。



1

コードベースやサーバーを変更することなく、まったく同じ問題が発生しました。それは、DBサーバーが100%のCPUで実行されていて、SQL ServerがCPU時間を使い果たしており、それがタイムアウトの原因であることがわかりました。


1

何日も同じ問題を抱えていた。このエラーに対処するために、コアプロジェクトにTLS1.2サポートを明示的に追加する必要があり、問題なく動作しました。(ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;)

詳細については、以下のリンクを参照してください(Usman Khurshidに感謝) https://www.itechtics.com/connection-successfully-established-error-occured-pre-login-handshake/


1

上記のほとんどを試しても何もうまくいきませんでした。その後、VPNソフトウェア(NordVPN)をオフにすると、すべてが問題なく動作しました。


1

先月私は多くの解決策を試しましたが、どれもうまくいきませんでした。問題は、プロダクションDBがVPN内にあり、ISPプロバイダーがHTTP接続が安全でないと考えていることです。ただし、SSMSから同じ実動DBに接続できました(TCPを使用)。

私のソリューション:ホットスポットとして携帯電話を使用し、オフィス/自宅のWi-Fiの代わりにモバイルデータを使用します。


1
私の場合も同じです。ありがとう!
David Lo

0

同じ問題があり、その理由は、.NET 2.0フレームワークを使用してコンパイルされたBCrypt.Netライブラリーでしたが、それを使用したプロジェクト全体が.NET 4.0でコンパイルされていました。症状が同じ場合は、BCryptソースコードをダウンロードして、.NET 4.0内のリリース構成で再構築してください。私がそれをした後、「ログイン前のハンドシェイク」はうまくいきました。それが誰にも役立つことを願っています。


0

私はこのエラーを経験し、皆さんからのすべての提案をここで行いましたが、私のエラーには何の影響もありませんでした。

犯人を見つけました*.ini。システムでファイルを使用している場合は、そこに入力されたサーバー名を確認し、それがweb.config接続文字列のサーバー名と同じであることを確認してください。


0

ここで同じ問題があり、ここにリストされている答えは機能せず、オンラインで見つけることができる解決策もありません。この問題は、Windows 10アニバーサリーアップデートが開発用PCに適用された直後に始まり、古いSQL Server 2005インスタンスにのみ影響を及ぼしました。WebアプリケーションまたはSql Management Studioを使用してインスタンスに接続できませんでした。

それが価値があるもののために、これは私のためにそれを解決したものです:

  1. SQL Server構成マネージャーを開きます(実行しているSQL Serverのバージョンによって異なります)。

    • C:\ Windows \ SysWOW64 \ SQLServerManager.msc
    • C:\ Windows \ SysWOW64 \ SQLServerManager10.mscまたは
    • C:\ Windows \ SysWOW64 \ SQLServerManager12.mscまたは
  2. SQL Serverサービスを選択

  3. 問題のあるサービスを見つけてプロパティを表示する

    • 例:私の場合、SQL Server(SQL2005)
  4. 「ログオン」タブで、「組み込みアカウント」を「ネットワークサービス」に変更します。

これは、このランダムなソリューションが言っていることとほぼ同じです。 -was-successfully-established-with-the-server-but-then-an-error-occurred-during-the-pre-login-handshake-12405.html

理由もなくネットワークサービスを選択しました。私はすでにローカルシステムを使用するように構成されています。このセキュリティは、ローカル開発マシンでのみ問題があり、ローカルでのみアクセスされるため、私には関係ありません。なぜこれが機能するのかはわかりませんが、機能しました。


0

私の場合、リモートデータベースにアクセスするときにエラーが発生しました。しかし、SQL Server Browserサービスを開始することで解決しました。

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


0

古いSQL Serverに接続している場合:

System.Dataから切り替えます。System.DataへのSqlClient.SqlConnectionOleDb.OleDbConnection

OleDb接続文字列を使用します。

<connectionStrings>
<add name="Northwind" connectionString="Provider=SQLOLEDB.1; Data Source=MyServer; Initial Catalog=Northwind;  Persist Security Info=True; User ID=abc; Password=xyz;" providerName="System.Data.OleDb" />
</connectionStrings>

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