Hallo,
Fehler bei 'Database handling':
System.InvalidOperationException: Timeout abgelaufen. Der Timeout ist vor dem Anfordern einer Verbindung aus dem Pool abgelaufen. Möglicherweise werden alle Verbindungen im Pool bereits verwendet und die maximale Poolgröße wurde erreicht. at System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction) at System.Data.SqlClient.SqlConnection.Open() at Content.Components.LayoutTemplate.genObject(XmlNode& pnd, XmlDocument& xmlDoc, XmlNode& xmlRoot)
Diese Meldung sagt ja eigentlich nur, dass es dem SqlClient keine neue Verbindung mehr aufmachen darf bzw. keine bestehende zur Verfügung steht, weil sie anderweitig in Verwendung sind.
Die Datenprovider benutzen ja einen Connection-Pool, für den man u.a. einstellen kann, wie viele Connections maximal gleichzeitig benutzt werden dürfen.
folgende Gründe könnten imho zu disem Problem führen:
-
im Connection-String ist ein zu kleiner Connection-Pool eingetragen. Überprüfe das Vorhandensein des Parameters 'Max Pool Size' in Connection-String. Wenn nicht ist die max. Anzahl von gleichzeitigen auf 100 begrenzt.
-
'Ungünstige' Programmierung. Instanzen werden nicht korrekt aufgelöst bzw. die Db-Connections werden eventuell in einem Singelton verwaltet.
-
Connections werden nicht ordnungsgemäß mit Close() an den Pool zurückgegeben. Ich kenne ja die Anwendung nicht, aber es könnte ja sein, dass sie zuerst einigen Datenbankverbindungen öffnet um beispielsweise Stammdaten zu laden ohne die Verbindungen wieder zurückzugeben und für die eigentliche Abfrage kann dann keine Verbindung mehr benutzt werden. Das passiert gerne, wenn man eine extreme Kapselung für die verschiedenen Objekte in der Applikation durchgeführt hat.
-
Begrenzung der maximalen anzahl von Verbindungen durch dne SQL-Server selbst. Bedenke, dass sich zwei Webserver um die Datenbankverbindungen 'raufen'. Unter Last werden also bis zu 'Max Pool Size'-Verbindungen pro Webserver benötigt.
Grüße
Klaus