2009-07-10 5 views
15

Ich habe eine Webanwendung, die derzeit auf Windows XP-Betriebssystem mit SQL Server 2005-Datenbank und IIS 6.0 ausgeführt wird.

Jetzt versuchen wir, es auf IIS 7.0 auf Windows Server 2008 und SQL Server 2008-Datenbank zu aktualisieren.
Wenn ich die Anwendung starte dann wirft es "Ein Transport-Level-Fehler ist beim Senden der Anfrage an den Server aufgetreten. (Provider: TCP-Provider, Fehler: 0 - Eine bestehende Verbindung wurde zwangsweise vom Remote-Host geschlossen.) "zufällig bei verschiedenen Datenbankaufrufen.

Ich habe verifiziert mit "sp_who", dass nur eine Verbindung, die ich benutze, geöffnet ist.

Kann mir jemand sagen, was könnte die Ursache für dieses Problem sein?Ein Transport-Level-Fehler ist aufgetreten ... (bestehende Verbindung vom Server geschlossen) Sql Server 2008

+0

Immer noch dieses Problem? –

+0

irgendeine Lösung dafür ??? – Narendra

Antwort

1

Oft ist es die Datenbank offline ist/geschlossen oder die SQL-Instanz/offline

4
neu gestartet wird

Vielleicht ist die Datenbank automatisch zu schließen gesetzt? Dies war der Standardwert für Datenbanken, die mit der älteren MSDE/Express-Edition erstellt wurden.

ALTER DATABASE YourDatabaseName SET AUTO_CLOSE OFF; 

Mehr:

Die SQL Server 2005 Express Edition Overview Staaten:

Features like Auto-Close and the ability to copy databases as files are enabled by default in SQL Server Express ...

Ich kann nicht, welches Service Pack erinnere den Standard geändert, aber der neue Datenbank-Benutzeroberfläche in der SP3-Version von Management Studio Express setzt die Einstellung Auto Close standardmäßig auf false.

+0

MSDE, ja. In welcher Express Edition war dies der Standard? –

+0

Bearbeiten: Weitere Informationen hinzugefügt. – devstuff

+0

@devstuff - funktioniert, muss aber jedes Mal ausgeführt werden, wenn der SQL Server neu gestartet wird. Irgendeine Möglichkeit, es dauerhaft zu machen? –

2

Dies ist ein Fehler, der beim Herstellen einer Verbindung zur Datenbank aufgrund eines Netzwerkfehlers auftritt, der von Sql Server nicht behoben werden kann.

Es wäre toll, dass die API, die verwendet wurde, um conenct zu behandeln, diesen Fehler behandelte, aber AFAIK ist es nicht. Die einzige Möglichkeit, dies zu lösen, besteht darin, die Verbindung zur Datenbank erneut herzustellen, wenn dieser Fehler auftritt.

Sie sollten versuchen, mindestens ein paar Mal mehr erneut zu verbinden, um sicherzustellen, dass der Fehler nicht persistent ist, und wenn dies der Fall ist, dann werfen Sie die Ausnahme. Meine Erfahrung sagt mir, dass der Versuch, die 99,9% der Zeiten wieder zu verbinden, erfolgreich sein wird.

14

Diese blog post von Michael Aspengren erläutert die Fehlermeldung "Beim Senden der Anfrage an den Server ist ein Transport-Level-Fehler aufgetreten."

0

Transportebene Fehler sind oft mit der Verbindung zu SQL-Server verbunden sein gebrochen ... in der Regel Netzwerk.

Timeout Expired wird normalerweise ausgelöst, wenn eine SQL-Abfrage zu lange dauert. Ist das das Szenario in Ihrem Fall? Wie gespeicherte Prozesse, die zu viel Zeit benötigen, um ausgeführt zu werden, oder gibt es Batch-Jobs, die ausgeführt werden?

0

In meinem Fall. Wir haben DELL R720, NICs sind an Bord und PCI Broadcom NetXtreme Gigabit Ethernet Karten. Wir stoßen auf zwei Probleme.

  1. Netzwerkgeschwindigkeit ist für HyperV-VMs sehr langsam. Die Lösung besteht darin, die "Virtual Machine Queues" der HyperV host Broadcom nic-Eigenschaftsfenster zu deaktivieren. Es befindet sich auf der Registerkarte Erweitert.

  2. SQL-Client, der dieses Transportstufenproblem aufweist. Es passierte nur einmal alle 10-15 Minuten. Gleichzeitig wirft der RDP-Dienst von Zeit zu Zeit auch den Client aus. Die Lösung besteht darin, den "Large Send Offload V2" der HyperV host Broadcom nic-Eigenschaftsfenster zu deaktivieren. Es befindet sich auf der Registerkarte Erweitert.

0

Verwenden Sie Clearpool (UrSQLconnection), zusammen mit zu entsorgen. Dies wird die schmutzige Verbindung löschen. und Sie können eine neue Verbindung öffnen.

Verwandte Themen