È stata stabilita una connessione con il server, ma si è verificato un errore durante l'handshake di pre-accesso


111

Ricevo l'errore seguente quando cerco di connettere il DB di produzione dall'ambiente locale.

Sono stato in grado di connettere il DB di produzione prima, ma improvvisamente ricevo il seguente errore, qualche idea?

È stata stabilita una connessione con il server, ma si è verificato un errore durante l'handshake di pre-accesso. (provider: provider TCP, errore: 0 - l'handle non è valido.)

Stavo cercando di eseguire il sito Web asp.net nel PC locale, che ha una stringa di connessione del DB di produzione, di seguito è riportata la traccia dello stack per l'errore che sto ottenendo nell'ambiente locale.

>    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)

Qualche idea su cosa potrebbe essere andato storto qui?


A quale DBMS ti stai connettendo?
Will A

1
Riesci a connetterti dal PC locale con SSMS? Questa domanda sarebbe meglio posta su serverfault.com
Will A

Sì, posso connettermi. Quello che ho osservato è stato improvvisamente che inizia a funzionare.
Jordon Willis

2
Credo che questa domanda appartenga a StackOverflow (e non ServerFault) perché il problema sottostante che ha causato l'errore era Asp.net Cassini in Visual Studio. L'arresto di tutte le istanze Cassini esistenti (WebDev.WebServer.exe) e la riesecuzione dell'app ha funzionato per me.
MikeTeeVee

@ MikeTeeVee Ho avuto lo stesso problema con una semplice applicazione WinForm. Nessun cassini coinvolto.
Sylvain Rodrigue

Risposte:


154

Soluzione

1) Pulisci la tua soluzione VS.Net

2) Ricostruisci il progetto.

3) Reimposta IIS

4) Esegui di nuovo il progetto.

Fondamentalmente questo ha risolto il mio problema, ma nel mio caso non stavo ricevendo questo errore e improvvisamente il mio ambiente locale inizia a darmi l'errore sopra, quindi potrebbe essere quel trucco per me.


25
Ho avuto un problema simile (anche localhost). Il punto chiave sembra forse essere stato il punto 3. Tutto quello che mi sembrava di dover fare era uccidere l'istanza del VS WebServer (Cassini) e ricostruire e premere F5. Questo mi ha risolto. Grazie per la tua risposta. (Dovresti considerare di contrassegnarlo come la soluzione)
Amadiere

1
Questa soluzione ha funzionato anche per me. Anch'io stavo usando VS Web Server (Cassini) al contrario di IIS proprio come Amadiere.
Simon Lomax

7
Sembra più una soluzione alternativa che una correzione. Mi chiedo se il vero problema abbia a che fare con il pool di connessioni.
jrummell

2
Ho avuto di nuovo questo oggi. Tutto quello che devi fare è eseguire iisreset da un prompt dei comandi dell'amministratore.
Ian Kemp

6
Questa risposta potrebbe essere migliorata fornendo alcune possibili indicazioni per l'analisi della causa principale. I work-around hanno valore, ma è più utile sapere perché ciò si verifica e perché funziona.
laindir

15

- Salva il tuo lavoro,
- Chiudi Visual Studio, quindi
- Riapri il tuo progetto

Funziona sempre per me.


29
Ha funzionato anche per me, ma spesso trovo che fare un caffè mentre si riavvia fa la differenza.
ED-209

Ho avuto un problema simile, ma invece con un server del nodo. Stavo eseguendo un server nodo su guest ubuntu VM e accedevo da host VM Windows 10. Mettere in pausa e salvare la VM, quindi reimpostare l'host di Windows 10, quindi aprire il backup della VM ha funzionato, quindi ho pensato che fosse un problema con Windows, non con il server locale. Ma poi, ho appena provato a resettare il server del nodo locale, e anche questo lo ha risolto ... quindi chissà, ah
RyanQuey


9

Ho riscontrato questo errore durante l'esecuzione di alcuni processi molto costosi in termini di memoria. Quando il sistema ha iniziato a funzionare a corto di memoria, ho iniziato a notare questo tipo di errore. Ho dovuto modificare l'algoritmo per utilizzare al meglio la RAM.

Da notare che mentre alcuni thread hanno generato questa eccezione, altri hanno generato:

System.Data.SqlClient.SqlException (0x80131904): Timeout connessione scaduto. Il periodo di timeout è trascorso durante il tentativo di utilizzare il riconoscimento dell'handshake di pre-accesso. Ciò potrebbe essere dovuto al fatto che l'handshake di pre-accesso non è riuscito o il server non è stato in grado di rispondere in tempo. La durata spesa durante il tentativo di connessione a questo server è stata: inizializzazione [Pre-Login] = 43606; handshake = 560; ---> System.ComponentModel.Win32Exception (0x80004005): l'operazione di attesa è scaduta

Entrambi i problemi sono scomparsi dopo che il sistema è stato modificato in modo che potesse funzionare utilizzando meno RAM.


1
Confermato. Ho eseguito un'elaborazione intensiva su SQL Server da C # utilizzando parallel.foreach sul mio laptop. Il mio utilizzo della memoria era al massimo. Il computer era a malapena utilizzabile per circa 15 minuti prima che ottenessi questo errore.
TheLegendaryCopyCoder

8

Ho avuto lo stesso problema, stavo memorizzando i dati della sessione nel database, la stringa di connessione conteneva Encrypt = True , che presumo abbia detto al client sql di connettersi al server in modalità sicura (SSL), rimuoverlo ha aiutato!


1
Questo flag verrà aggiunto alla stringa di connessione se si utilizzerà un database SQL di Windows Azure. Sono abbastanza certo che verrà utilizzato anche per altri provider PaaS / IaaS / Server.
Parth Shah

AzureSQL richiede la crittografia true blogs.msdn.microsoft.com/buckwoody/2012/03/06/…
Jeson Martajaya

5

Potresti voler controllare alcune cose:

  1. Il tuo server di produzione consente connessioni remote. (possibile che qualcuno lo abbia disattivato, soprattutto se si dispone di un DBA)

  2. Controlla la tua stringa di connessione. A volte, se stai usando un indirizzo IP o un nome di server, questo causerà questo errore. Prova entrambi.


4

Nel mio caso è stato:

Persist Security Info=True;

nella mia stringa di connessione che doveva essere rimossa. Una volta fatto ciò, non ho più avuto problemi.


4

Nel mio caso questo errore si è verificato con dot net core e Microsoft.Data.SqlClient. La risoluzione era di aggiungere ;TrustServerCertificate=truealla fine della stringa di connessione.


Grazie, mi hai salvato :)
DiPix

Questo accadeva quando si utilizzavano certificati autofirmati
Geoff Gunter

3

Come descritto nella risposta di Ricardo ,

netsh Winsock reset

ha funzionato per me,

PS se si dispone di un gestore di download Internet o di programmi che modificano l'impostazione IP, dopo aver eseguito questo comando al riavvio del computer IDM chiederà di modificare le impostazioni, impostare NO in questo caso e quindi eseguire l'applicazione funzionerà correttamente.

Lo spero


3

Ho avuto un problema simile in cui non riuscivo a connettermi a un database e ho provato i consigli qui.

Alla fine della giornata questo è ciò che ha funzionato per me:

Ha utilizzato lo strumento Gestione configurazione SQL Server per abilitare i protocolli TCP / IP e / o Named Pipes sul computer client SQL Server.

  1. Fare clic su Start, scegliere Tutti i programmi e fare clic su Gestione configurazione SQL Server.
  2. Fare clic per espandere Configurazione di rete di SQL Server e quindi fare clic su Protocolli client.
  3. Fare clic con il pulsante destro del mouse sul protocollo TCP / IP e quindi fare clic su Abilita.
  4. Fare clic con il pulsante destro del mouse sul protocollo Named Pipes e quindi fare clic su Abilita.
  5. Riavviare il servizio SQL Server se richiesto.

Non sono ancora sicuro del perché o quando sia stato disabilitato.


2

Per me la soluzione è eliminare i processi di lavoro Zombie IIS Express.

es. individuare in Task Manager e terminare l'attività.

inserisci qui la descrizione dell'immagine


1

Ho avuto lo stesso problema e non ho avuto fortuna con le soluzioni suggerite. Poi mi sono imbattuto in questo articolo e ho visto il commento di Mirrh riguardo a un programma chiamato Sendori che blocca l'LSP. Non ho idea di come sia arrivato sul mio computer ma era lì e rimuovendolo ha risolto il problema.

Se l'articolo non funziona, controlla i tuoi programmi e disinstalla Sendori se lo vedi.


1

Ho riavviato il servizio SQL Server (Sharepoint) e ha risolto il problema.


1

Stavo ottenendo lo stesso identico problema senza modifiche alla base di codice o ai server. Si è scoperto che il server DB era in esecuzione al 100% della CPU e SQL Server era a corto di tempo della CPU, il che ha causato il timeout.



1

Ho provato la maggior parte di quanto sopra e niente ha funzionato. Quindi ha spento il software VPN (NordVPN) e tutto è andato bene.


1

Ho provato molte soluzioni nell'ultimo mese, nessuna ha funzionato. Il problema è che il DB di produzione si trova all'interno di una VPN e in qualche modo il provider ISP ritiene che la connessione HTTP non sia sicura. Tuttavia, sono stato in grado di connettermi allo stesso DB di produzione da SSMS (utilizza TCP).

La mia soluzione: usa il telefono cellulare come hotspot e utilizza i dati mobili invece del Wi-Fi dell'ufficio / di casa.


1
Lo stesso nel mio caso. Grazie!
David Lo

0

Aveva lo stesso problema, il motivo era la libreria BCrypt.Net, compilata utilizzando il framework .NET 2.0, mentre l'intero progetto, che lo utilizzava, veniva compilato con .NET 4.0. Se i sintomi sono gli stessi, prova a scaricare il codice sorgente BCrypt e ricostruiscilo nella configurazione della versione all'interno di .NET 4.0. Dopo averlo fatto, "l'handshake pre-login" ha funzionato bene. Spero che aiuti chiunque.


0

Ho riscontrato questo errore e ho fatto tutti i suggerimenti di voi ragazzi qui, ma nessuno ha avuto alcun effetto sul mio errore.

Ho colto il colpevole: se stai usando un *.inifile per il tuo sistema, potresti voler controllare quale nome del server è stato inserito lì e assicurarti che sia lo stesso di quello nella tua stringa di connessione web.config.


0

Lo stesso problema qui e nessuna risposta elencata qui ha funzionato, né alcuna soluzione che ho potuto trovare online. Il problema è iniziato poco dopo che l'aggiornamento dell'anniversario di Windows 10 è stato applicato al mio PC di sviluppo e ha interessato solo la mia vecchia istanza di SQL Server 2005. Non sono stato in grado di connettermi all'istanza tramite le mie applicazioni Web o anche utilizzando Sql Management Studio.

Per quello che vale, questo è ciò che mi ha risolto:

  1. Apri Gestione configurazione SQL Server (a seconda della versione di SQL Server in esecuzione):

    • C: \ Windows \ SysWOW64 \ SQLServerManager.msc
    • C: \ Windows \ SysWOW64 \ SQLServerManager10.msc OPPURE
    • C: \ Windows \ SysWOW64 \ SQLServerManager12.msc OPPURE
    • eccetera
  2. Seleziona Servizi SQL Server

  3. Individua il servizio problematico e visualizza Proprietà

    • ad esempio SQL Server (SQL2005) nel mio caso
  4. Nella scheda Accesso, modifica "Account predefinito" in "Servizio di rete"

Che è quasi quello che diceva questa soluzione casuale: http://www.kutayzorlu.com/operating-systems/linux-unix-redhat-debian-ubuntu-opensuse-centos/general-server-administrating/error-fixed-a-connection -Era-successo-consolidata con-il-server-ma-poi-an-error-occurred-durante-la-pre-login-handshake-12405.html

Ho scelto il servizio di rete senza alcun motivo. Il mio era già configurato per utilizzare il sistema locale. Questa sicurezza non mi importa in quanto era problematica solo sulla mia macchina di sviluppo locale, accessibile solo localmente. Non posso consigliare perché funziona, ma lo ha fatto.


0

Nel mio caso, ricevevo l'errore quando volevo accedere a un database remoto. Tuttavia, l'ho risolto avviando il servizio SQL Server Browser.

inserisci qui la descrizione dell'immagine


0

Se ti stai connettendo a un vecchio SQL Server:

Passa da System.Data. SqlClient.SqlConnection a System.Data. OleDb.OleDbConnection

Usa una stringa di connessione 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>

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.