wake-up-neo.com

Die Ausnahme "Physische Verbindung ist nicht verwendbar" kann nicht beseitigt werden

Ich bin dabei, mich selbst zu erschießen. Verbrachte nun einige Wochen damit, dieses Problem zu lösen. Wir haben eine ASP.NET MVC 4-Webanwendung, die SQL Server 2012 und Entity Framework als ORM und Unity für IoC verwendet. Die Web-App wird auf Amazon EC2 gehostet. Ich bekam die Ausnahme "Physische Verbindung ist nicht verwendbar". Es kommt einige Male am Tag vor. Ich habe viele Artikel und Foren durchsucht und alle möglichen Vorschläge ausprobiert:

  • Es wurde versucht, das Pooling aus der Verbindungszeichenfolge "Polling = False" zu entfernen.
  • Es wurde versucht, die Poolgröße und die Verbindungsdauer zu begrenzen
  • Es wurde versucht, LifetimeManager of Unity in HierarchicalLifetimeManager, PerRequestLifetimeManager zu ändern. Es wurde auch sichergestellt, dass der Entitätskontext nach dem Ende der Anforderung gelöscht wird
  • Alle TransactionScope-Referenzen wurden entfernt

In Ausnahmefällen können Sie die Anwendung nur wiederherstellen, indem Sie den Server neu starten. Das ist sehr schlimm !!!

Dies ist eine vollständige Ausnahme:

Beim Senden der Anforderung an den Server ist ein Fehler auf Transportebene aufgetreten. (Anbieter: Sitzungsanbieter, Fehler: 19 - Physische Verbindung ist nicht verwendbar)

24
fenix2222

Ich bestätige jetzt, indem ich die Verbindungszeichenfolge auf dem Server ändere, um "." Zu verwenden. Bei Datenquellen anstelle von Domainnamen scheint die Ausnahme verschwunden zu sein. Sehr seltsam, da der Domainname früher funktionierte. Muss eine Art Update auf SQL Server sein

7
fenix2222

Ich weiß, dass dies ein alter Beitrag ist, aber ich hatte kürzlich eine schreckliche Zeit mit diesem Fehler und es gab keine Lösungen in einem der Blogs.

Spezifische Details zu meinem Problem: ASP.NET-Webanwendung mit .NET-Zielframework 4.5, MVC-Version. 5.2.3, Entity ver. 6.0.0.0, MS SQLServer Express 2014. Auf meinem Entwicklungssystem wird Windows 7 Pro SP1 ausgeführt.

Symptome: Der Fehler trat plötzlich auf (ich hatte fast drei Wochen lang nicht an dem Projekt gearbeitet, zu diesem Zeitpunkt hatte es einwandfrei funktioniert). Beim Start der App nach dem Anmelden des Benutzers hat die zweite vom Entity Framework ALLWAYS an die Datenbank gesendete Abfrage den Fehler " Beim Empfang der Ergebnisse vom Server ist ein Fehler auf Transportebene aufgetreten . (Anbieter: Sitzungsanbieter, Fehler: 19 - Physische Verbindung ist nicht verwendbar) ". Es war egal, welche Tabelle abgefragt wurde. Der Fehler trat nicht sporadisch auf und ein Neustart des Servers half nicht. Der Fehler trat mit IIS und IIS express auf.

SqlConnection.ClearAllPools () verhinderte den Fehler nur für EINE Abfrage, und ich wollte dies nicht vor jedem einzelnen Entity-Aufruf im Programm hinzufügen. Ich habe jede einzelne Lösung in allen Blogs ohne Erfolg ausprobiert, sogar Lösungen für andere Fehler auf Transportebene. Ich habe die Paketaktualisierungen für meine Referenzen zurückgesetzt, um zu versuchen, wieder in einen funktionierenden Zustand zu gelangen. Nichts!

The Solution: Der Schuldige war das Sicherheitsupdate für Microsoft SQL Server 2014 SP1 (KB3070446) !! Ich habe dieses Update zurückgesetzt und alles hat wie ein Zauber funktioniert!

Ich habe zwei Tage Entwicklungsarbeit verloren, die sich mit diesem Problem befasst. Hoffentlich kann dieser Beitrag jemand anderem helfen, diese Qual zu vermeiden!

6
MDGeek

Dieser Fehler trat nach dem Entfernen von MaxDegreeOfParallelism auf, das beim Festlegen von db.Database.CommandTimeout = 0 standardmäßig auf -1 oder auf kein Limit festgelegt ist.

Der Vorschlag ist, die MaxDegreeOfParallelism explizit auf einen sicheren Wert zu setzen.

Anderes Szenario: Die Netzwerkverbindung ist selbst für einige Sekunden unterbrochen, während die Anwendung mit der Serverdatenbank kommuniziert.

1
usefulBee

Ich bin auch auf diesen Fehler gestoßen. In meinem Fall bestand das Problem darin, dass die Verbindung vom Datenbankserver geschlossen wurde, die Verbindung jedoch im Verbindungspool meiner App gültig blieb.

Durch das Zurücksetzen des Anwendungspools konnte meine App wieder ausgeführt werden.

1
DDA

Dies war ein DNS-Fehler für mich, der diagnostiziert wurde, weil die Verwendung des Servers Name in der Verbindungszeichenfolge den Fehler verursachte, aber die Verwendung des IP hat gut funktioniert. Öffne cmd Prompt, führe ein schnelles ipconfig /flushdns um zu sehen, ob es hilft.

0
codeMonkey

Ich hatte den gleichen Fehler für 2 Tage! und wusste nicht mal warum es plötzlich passiert ist? !!

  • Was sich herausstellte: Ich hatte ein Problem mit dem Netzwerkauthentifizierungszugriff (aufgrund meiner WiFi-Verbindung). Sobald ich mein WiFi getrennt/deaktiviert und nur über eine Kabelverbindung (gesichert und stabil) verbunden hatte, verschwand der Fehler. .

  • Ich habe auch folgendes gemacht:

Alle SQL Server-Dienste neu gestartet. Meine SQLServer-Instanz wurde neu gestartet. Diese Requisiten wurden meiner DEF-Verbindungszeichenfolge hinzugefügt.

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

Die Datenbankverbindung wird vom Datenbankserver geschlossen. Die Verbindung bleibt im Verbindungspool Ihrer App gültig. Wenn Sie die freigegebene Verbindungszeichenfolge abrufen und versuchen, sie auszuführen, kann sie daher nicht auf die Datenbank zugreifen. Wenn Sie Visual Studio entwickeln, schließen Sie einfach den temporären Webserver in Ihrer Taskleiste.

Wenn es in der Produktion vorkommt, sollte durch das Zurücksetzen Ihres Anwendungspools für Ihre Website der Verbindungspool wiederverwendet werden.

Möglicherweise aufgrund eines Updates des Intrusion Prevention Systems.

Bitte versuchen Sie, auf den folgenden Thread zu verweisen: http://forums.asp.net/t/1908976.aspx

Hoffe es kann helfen.

0
Samuel Moshie