web-dev-qa-db-fra.com

Impossible de se débarrasser de l'exception «la connexion physique n'est pas utilisable»

Je suis sur le point de me tirer dessus. J'ai passé quelques semaines à essayer de résoudre ce problème. Nous avons une application Web ASP.NET MVC 4 qui utilise SQL Server 2012 et Entity Framework comme ORM et Unity pour IoC. L'application Web est hébergée sur Amazon EC2. J'ai commencé à recevoir l'exception "La connexion physique n'est pas utilisable". Cela arrive plusieurs fois par jour. J'ai recherché de nombreux articles et forums et essayé toutes les suggestions possibles:

  • J'ai essayé de supprimer le regroupement de la chaîne de connexion "Polling = False"
  • Taille de pool et durée de vie de connexion limitées
  • J'ai essayé de changer LifetimeManager de Unity en HierarchicalLifetimeManager, PerRequestLifetimeManager. Assurez-vous également que le contexte des entités est supprimé après la fin de la demande
  • Suppression de toutes les références TransactionScope

Quand une exception se produit, la seule façon de restaurer l'application est de redémarrer le serveur, ce qui est très mauvais !!!

Ceci est une exception complète:

Une erreur au niveau du transport s'est produite lors de l'envoi de la demande au serveur. (fournisseur: Session Provider, erreur: 19 - La connexion physique n'est pas utilisable)

24
fenix2222

Je confirme maintenant, en changeant la chaîne de connexion sur le serveur pour utiliser "." pour la source de données au lieu du nom de domaine, l'exception semble avoir disparu. Très bizarre, le nom de domaine fonctionnait auparavant. Doit être une sorte de mise à jour sur SQL Server

7
fenix2222

Je sais que c'est un vieux post mais j'ai récemment eu un horrible temps avec cette erreur et il n'y avait aucune solution sur aucun des blogs.

Détails spécifiques sur mon problème: Application Web ASP.NET avec cible .NET Framework 4.5, MVC ver. 5.2.3, Entité ver. 6.0.0.0, MS SQLServer Express 2014. Mon système de développement exécute Windows 7 Pro SP1.

Symptômes: L'erreur s'est produite soudainement (je n'avais pas travaillé sur le projet pendant près de trois semaines, moment auquel il avait bien fonctionné). Lorsque j'ai démarré l'application, après avoir connecté l'utilisateur, la deuxième requête envoyée à la base de données par le framework Entity ALLWAYS a généré l'erreur " Une erreur au niveau du transport s'est produite lors de la réception des résultats du serveur . (fournisseur: Session Provider, erreur: 19 - La connexion physique n'est pas utilisable) ". Peu importe le tableau interrogé. L'erreur n'était pas intermittente et le redémarrage du serveur n'a pas aidé. L'erreur s'est produite en utilisant IIS et IIS express.

SqlConnection.ClearAllPools () a empêché l'erreur pour UNE seule requête, et je ne voulais pas l'ajouter avant chaque appel d'entité unique dans le programme. J'ai essayé toutes les solutions sur tous les blogs en vain, même les solutions à d'autres erreurs de niveau de transport. J'ai annulé les mises à jour de package pour mes références dans une tentative de revenir à un état de fonctionnement. Rien!

La solution: Le coupable était la mise à jour de sécurité de Microsoft SQL Server 2014 SP1 (KB3070446) !! J'ai annulé cette mise à jour et tout a fonctionné comme un charme!

J'ai perdu deux jours de travail de développement pour résoudre ce problème, j'espère que ce message peut aider quelqu'un d'autre à éviter cette agonie!

6
MDGeek

A eu cette erreur après avoir supprimé MaxDegreeOfParallelism qui est défini par défaut sur -1 ou aucune limite lors de la définition de db.Database.CommandTimeout = 0.

La suggestion est de définir explicitement MaxDegreeOfParallelism sur une valeur sûre.

Autre scénario: La connexion réseau est interrompue même pendant quelques secondes pendant que l'application communique avec la base de données du serveur.

1
usefulBee

J'ai également rencontré cette erreur. Dans mon cas, le problème était que la connexion était fermée par le serveur de base de données mais la connexion restait valide dans le pool de connexions de mon application.

La réinitialisation du pool d'applications a permis à mon application d'être de nouveau opérationnelle.

1
DDA

C'était une erreur DNS pour moi, diagnostiquée parce que l'utilisation du serveur nom dans la chaîne de connexion a produit l'erreur, mais en utilisant IP a bien fonctionné. Ouvrez l'invite cmd, exécutez un rapide ipconfig /flushdns pour voir si cela aide.

0
codeMonkey

J'ai eu la même erreur pendant 2 jours! et je ne savais même pas pourquoi c'est arrivé soudainement?

  • Ce qu'il s'est avéré être: j'ai eu un problème d'accès à l'authentification réseau (à cause de ma connexion WiFi) .. et une fois que j'ai déconnecté/désactivé mon WiFi et que je me suis connecté uniquement via une connexion par câble (sécurisée et stable) .. l'erreur a disparu. .

  • J'ai également fait ce qui suit, comme:

Redémarrage de tous les services SQL Server. Redémarrage de mon instance SQLServer. Ajout de ces accessoires à ma chaîne de connexion DEF ..

Connection Lifetime=30; Max Pool Size=350;Connection Timeout=30;Connection Lifetime=0;ConnectRetryCount=3;ConnectRetryInterval=10; 
0
Mahmoud Sayed

La connexion à la base de données est fermée par le serveur de base de données. La connexion reste valide dans le pool de connexions de votre application; par conséquent, lorsque vous récupérez la chaîne de connexion partagée et essayez de l'exécuter, elle n'est pas en mesure d'atteindre la base de données. Si vous développez Visual Studio, fermez simplement le serveur Web temporaire sur votre barre des tâches.

Si cela se produit en production, la réinitialisation de votre pool d'applications pour votre site Web doit recycler le pool de connexions.

Peut-être en raison d'une mise à jour du système de prévention des intrusions.

Veuillez essayer de vous référer au fil suivant: http://forums.asp.net/t/1908976.aspx

J'espère que cela peut aider.

0
Samuel Moshie