Une connexion a été établie avec succès avec le serveur, mais une erreur s'est produite lors de la négociation de pré-connexion

111

J'obtiens l'erreur suivante lorsque j'essaye de connecter Production DB à partir de l'environnement local.

J'ai pu connecter Production DB avant, mais je reçois soudainement une erreur de suivi, une idée?

Une connexion a été établie avec succès avec le serveur, mais une erreur s'est produite lors de la négociation de pré-connexion. (fournisseur: fournisseur TCP, erreur: 0 - le handle n'est pas valide.)

J'essayais d'exécuter le site Web asp.net sur un PC local, qui a une chaîne de connexion de Production DB, en suivant la trace de pile pour l'erreur que j'obtiens dans l'environnement local.

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

Une idée de ce qui aurait pu mal tourner ici?

Jordon Willis
la source
À quel SGBD vous connectez-vous?
Will A
1
Pouvez-vous vous connecter à partir du PC local avec SSMS? Cette question serait mieux posée sur serverfault.com
Will A
Oui, je peux me connecter. Ce que j'ai été l'observateur a soudainement commencé à fonctionner.
Jordon Willis
2
Je pense que cette question appartient à StackOverflow (et non à ServerFault) car le problème sous-jacent à l'origine de l'erreur était Asp.net Cassini dans Visual Studio. L'arrêt de toutes les instances Cassini (WebDev.WebServer.exe) existantes et la réexécution de l'application ont fonctionné pour moi.
MikeTeeVee
@ MikeTeeVee J'ai eu le même problème avec une simple application WinForm. Aucun cassini impliqué.
Sylvain Rodrigue

Réponses:

154

Solution

1) Nettoyez votre solution VS.Net

2) Projet de reconstruction.

3) Réinitialiser IIS

4) Exécutez à nouveau le projet.

En gros, cela a résolu mon problème, mais dans mon cas, je n'obtenais pas cette erreur et tout à coup, mon environnement local commence à me donner l'erreur ci-dessus, alors peut-être que cette astuce fonctionne pour moi.

Jordon Willis
la source
25
J'ai eu un problème similaire (localhost aussi). Le point clé semble peut-être avoir été le point 3. Tout ce que je semblait avoir à faire était de tuer l'instance du VS WebServer (Cassini) et de reconstruire et d'appuyer sur F5. Cela a résolu le problème pour moi. Merci pour votre réponse. (Vous devriez envisager de le marquer comme la solution)
Amadiere
1
Cette solution a également fonctionné pour moi. Moi aussi, j'utilisais VS Web Server (Cassini) par opposition à IIS, tout comme Amadiere.
Simon Lomax
7
Cela ressemble plus à une solution de contournement qu'à un correctif. Je me demande si le vrai problème est lié à la mise en commun des connexions.
jrummell le
2
J'avais encore ça aujourd'hui. Tout ce que vous avez à faire est d'exécuter iisreset à partir d'une invite de commande administrateur.
Ian Kemp
6
Cette réponse pourrait être améliorée en fournissant quelques directions possibles pour l'analyse des causes profondes. Les solutions de rechange ont une valeur, mais il est plus utile de savoir pourquoi cela se produit et pourquoi la solution de contournement fonctionne.
laindir
15

- Sauvegardez votre travail,
- Fermez Visual Studio, puis
- Rouvrez votre projet

Fonctionne toujours pour moi.

Dumisani
la source
29
Cela a fonctionné pour moi aussi, mais je trouve souvent que faire un café pendant qu'il redémarre fait toute la différence.
ED-209 le
J'ai eu un problème similaire, mais avec un serveur de nœuds à la place. J'exécutais un serveur de nœuds sur l'invité de la machine virtuelle ubuntu et j'accédais à partir de l'hôte de la machine virtuelle Windows 10. La mise en pause et l'enregistrement de la machine virtuelle, puis la réinitialisation de l'hôte Windows 10, puis l'ouverture de la sauvegarde de la machine virtuelle fonctionnaient.J'ai donc supposé que c'était un problème avec Windows, pas avec le serveur local. Mais alors, je viens d'essayer de réinitialiser le serveur de nœud local, et cela l'a également corrigé ... alors qui sait, ha
RyanQuey
10

L'exécution de la commande suivante a fonctionné pour moi:

netsh Winsock reset

Vu sur https://serverfault.com/a/487139/250527

Ricardo Stuven
la source
2
Cela a résolu mon problème. Je dois le déjeuner au gars du réseau parce que je l'avais jeté sous le bus.
greg
FYI, cela resetnécessite un redémarrage du système.
wqw
9

J'ai rencontré cette erreur lors de l'exécution de processus très coûteux en mémoire. Lorsque le système a commencé à manquer de mémoire, j'ai commencé à remarquer ce genre d'erreur. J'ai dû changer d'algorithme afin de mieux utiliser la RAM.

À noter que si certains threads ont levé cette exception, d'autres ont lancé:

System.Data.SqlClient.SqlException (0x80131904): délai de connexion expiré. Le délai d'expiration s'est écoulé lors de la tentative d'utilisation de l'accusé de réception de la prise de contact préalable à la connexion. Cela peut être dû au fait que l'établissement de liaison préalable à la connexion a échoué ou que le serveur n'a pas pu répondre à temps. La durée passée lors de la tentative de connexion à ce serveur était - [Pre-Login] initialization = 43606; poignée de main = 560; ---> System.ComponentModel.Win32Exception (0x80004005): l'opération d'attente a expiré

Les deux problèmes ont disparu après que le système a été modifié afin qu'il puisse fonctionner en utilisant moins de RAM.

Starnuto di topo
la source
1
Confirmé. J'ai exécuté un traitement intensif sur SQL Server à partir de C # en utilisant parallel.foreach sur mon ordinateur portable. Mon utilisation de la mémoire était à son maximum. L'ordinateur était à peine utilisable pendant environ 15 minutes avant que j'obtienne cette erreur.
TheLegendaryCopyCoder
8

J'ai eu le même problème, je stockais les données de session dans la base de données, la chaîne de connexion contenait Encrypt = True , ce qui, je suppose, a dit au client SQL de se connecter au serveur en mode sécurisé (SSL), ce qui a aidé!

Terry Kernan
la source
1
Cet indicateur sera ajouté à votre chaîne de connexion si vous comptez utiliser une base de données Windows Azure SQL. Je suis presque certain qu'il sera également utilisé pour d'autres fournisseurs PaaS / IaaS / Server.
Parth Shah
AzureSQL nécessitant de crypter de vrais blogs.msdn.microsoft.com/buckwoody/2012/03/06/…
Jeson Martajaya
5

Vous voudrez peut-être vérifier quelques points:

  1. Votre serveur de production autorise les connexions à distance. (possible que quelqu'un ait désactivé cela, surtout si vous avez un DBA)

  2. Vérifiez votre chaîne de connexion. Parfois, si vous utilisez une adresse IP ou un nom de serveur, cela provoquera cette erreur. Essayez les deux.

Richard Fantozzi
la source
4

Dans mon cas, c'était:

Persist Security Info=True;

dans ma chaîne de connexion qui devait être supprimée. Une fois que j'ai fait cela, je n'ai plus eu de problèmes.

delliottg
la source
4

Dans mon cas, cette erreur s'est produite avec dot net core et Microsoft.Data.SqlClient. La résolution était d'ajouter ;TrustServerCertificate=trueà la fin de la chaîne de connexion.

gratinier
la source
Merci, vous m'avez sauvé :)
DiPix
C'était tout lors de l'utilisation de certificats auto-signés
Geoff Gunter
3

Comme décrit dans la réponse de Ricardo ,

netsh Winsock reset

a travaillé pour moi,

PS si vous avez un gestionnaire de téléchargement Internet ou de tels programmes qui modifient votre paramètre IP est installé, après avoir exécuté cette commande lorsque vous redémarrez votre ordinateur, IDM vous demandera de modifier le paramètre, définissez NON dans ce cas, puis exécutez votre application, cela fonctionnera correctement.

J'espère

Vishal Sharma
la source
3

J'ai eu un problème similaire où je ne pouvais pas me connecter à une base de données et j'ai essayé les recommandations ici.

Au final, voici ce qui a fonctionné pour moi:

Utilisé l'outil Gestionnaire de configuration SQL Server pour activer les protocoles TCP / IP et / ou Named Pipes sur l'ordinateur client SQL Server.

  1. Cliquez sur Démarrer, pointez sur Tous les programmes et cliquez sur Gestionnaire de configuration SQL Server.
  2. Cliquez pour développer la configuration réseau de SQL Server, puis cliquez sur protocoles clients.
  3. Cliquez avec le bouton droit sur le protocole TCP / IP, puis cliquez sur Activer.
  4. Cliquez avec le bouton droit sur le protocole Named Pipes, puis cliquez sur Activer.
  5. Redémarrez le service serveur SQL si vous y êtes invité.

Je ne sais toujours pas pourquoi ni quand cela a été désactivé.

Daffyjeje
la source
2

Pour moi, la solution est de tuer les processus de travail Zombie IIS Express.

par exemple, recherchez dans le Gestionnaire des tâches et terminez la tâche.

entrez la description de l'image ici

Daniel de Zwaan
la source
1

J'ai eu le même problème et je n'avais pas de chance avec les correctifs suggérés. Je suis ensuite tombé sur cet article et j'ai vu le commentaire de Mirrh concernant un programme appelé Sendori bloquant le LSP. Je ne sais pas comment il est arrivé sur mon ordinateur, mais il était là et sa suppression a résolu le problème.

Si l'article ne fonctionne pas, vérifiez simplement vos programmes et désinstallez Sendori si vous le voyez.

Rickeroye
la source
1

J'ai redémarré le service SQL Server (Sharepoint) et cela a résolu le problème.

user2087459
la source
1

J'avais exactement le même problème sans modification de la base de code ou des serveurs. Il s'est avéré que le serveur de base de données fonctionnait à 100% du processeur et que SQL Server manquait de temps CPU, ce qui a provoqué l'expiration du délai.

TheLukeMcCarthy
la source
1

J'ai essayé la plupart de ce qui précède et rien n'a fonctionné. Puis désactivé le logiciel VPN (NordVPN) et tout allait bien.

Paul Evans
la source
1

J'ai essayé de nombreuses solutions au cours du mois dernier, aucune n'a fonctionné. Le problème est que la base de données de production se trouve dans un VPN et que le fournisseur ISP pense que la connexion HTTP n'est pas sécurisée. Cependant, j'ai pu me connecter à la même base de données de production à partir de SSMS (utilise TCP).

Ma solution: utiliser le téléphone mobile comme point d'accès et utiliser les données mobiles au lieu du Wi-Fi de mon bureau / domicile.

mihai_omega
la source
1
Idem dans mon cas. Merci!
David Lo le
0

Eu le même problème, la raison en était la bibliothèque BCrypt.Net, compilée à l'aide du framework .NET 2.0, tandis que l'ensemble du projet, qui l'utilisait, était en train de compiler avec .NET 4.0. Si les symptômes sont identiques, essayez de télécharger le code source de BCrypt et de le reconstruire dans la configuration de la version dans .NET 4.0. Après l'avoir fait, la "poignée de main pré-connexion" fonctionnait bien. J'espère que cela aide n'importe qui.

Eadel
la source
0

J'ai rencontré cette erreur et j'ai fait toutes les suggestions de votre part ici, mais aucune n'a eu d'effet sur mon erreur.

J'ai attrapé le coupable: si vous utilisez un *.inifichier pour votre système, vous voudrez peut-être vérifier quel nom de serveur a été entré ici et vous assurer qu'il est le même que celui de votre chaîne de connexion web.config.

user3619399
la source
0

Même problème ici et aucune réponse listée ici n'a fonctionné, ni aucune solution que j'ai pu trouver en ligne. Le problème a commencé peu de temps après l'application de la mise à jour anniversaire de Windows 10 sur mon PC de développement et n'a affecté que mon ancienne instance SQL Server 2005. Je n'ai pas pu me connecter à l'instance via mes applications Web ou même à l'aide de Sql Management Studio.

Pour ce que ça vaut, c'est ce qui l'a résolu pour moi:

  1. Ouvrez SQL Server Configuration Manager (selon la version de SQL Server que vous exécutez):

    • C: \ Windows \ SysWOW64 \ SQLServerManager.msc
    • C: \ Windows \ SysWOW64 \ SQLServerManager10.msc OU
    • C: \ Windows \ SysWOW64 \ SQLServerManager12.msc OU
    • etc
  2. Sélectionnez les services SQL Server

  3. Localisez le service en difficulté et affichez les propriétés

    • par exemple SQL Server (SQL2005) dans mon cas
  4. Dans l'onglet Connexion, remplacez le "Compte intégré" par "Service réseau"

C'est presque ce que disait cette solution aléatoire: http://www.kutayzorlu.com/operating-systems/linux-unix-redhat-debian-ubuntu-opensuse-centos/general-server-administrating/error-fixed-a-connection -a-été-établi-avec-succès-avec-le-serveur-mais-alors-une-erreur-s'est-produite-lors-de-la-poignée-de-pré-connexion-12405.html

J'ai choisi le service réseau sans aucune raison. Le mien était déjà configuré pour utiliser le système local. Cette sécurité n'a pas d'importance pour moi car elle n'était problématique que sur ma machine de développement locale, accessible uniquement localement. Je ne peux pas dire pourquoi cela fonctionne, mais c'est le cas.

Arkiliknam
la source
0

Dans mon cas, j'obtenais l'erreur lorsque je voulais accéder à une base de données distante. Cependant, je l'ai résolu en démarrant le service SQL Server Browser.

entrez la description de l'image ici

Ifesinachi Bryan
la source
0

Si vous vous connectez à un ancien serveur SQL:

Passer de System.Data. SqlClient.SqlConnection à System.Data. OleDb.OleDbConnection

Utilisez une chaîne de connexion 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>
Dominic Isaia
la source