Pool / Timeout ?

01/08/2009 - 08:16 von Mirco Kaminski | Report spam
Hallo NG,

über ein Menü wàhle ich Artikelgruppen aus und lasse diese anzeigen.
Nach ca. 10-15 Klicks bleibt die Ladeanzeige stehen und zeigt nach einiger
Zeit diese Fehlermeldung.


Serverfehler in der Anwendung /.
Timeout abgelaufen. Das Zeitlimit 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.
Beschreibung: Unbehandelte Ausnahme beim Ausführen der aktuellen
Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere
Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler
im Code verursacht wurde.

Ausnahmedetails: System.InvalidOperationException: Timeout abgelaufen. Das
Zeitlimit 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.

Quellfehler:

Beim Ausführen der aktuellen Webanforderung wurde einen unbehandelte
Ausnahme generiert. Informationen über den Ursprung und die Position der
Ausnahme können mit der Ausnahmestapelüberwachung angezeigt werden.

Stapelüberwachung:

[InvalidOperationException: Timeout abgelaufen. Das Zeitlimit 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.]
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection
owningConnection) +4863722
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection
outerConnection, DbConnectionFactory connectionFactory) +117
System.Data.SqlClient.SqlConnection.Open() +122
scshop.MenuePositionenDB.GetArtikelItems(String cKapitel, String cKomma)
+217
scshop.ProductsList.Page_Load(Object sender, EventArgs e) +580
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o,
Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender,
EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627


Versionsinformationen: Microsoft .NET Framework-Version:2.0.50727.3082;
ASP.NET-Version:2.0.50727.3082


Hier ist die entsprechende Routine:

public SqlDataReader GetArtikelItems(string cKapitel,string cKomma)
{

SqlConnection myConnection = new
SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]);
string cSQL = "SELECT ..
SqlCommand myCommand = new SqlCommand(cSQL, myConnection);
myCommand = new SqlCommand(cSQL, myConnection);
myCommand.CommandType = CommandType.Text;
myConnection.Open();
SqlDataReader result =
myCommand.ExecuteReader(CommandBehavior.CloseConnection);
return result;
}

-

Ich habe die Vermutung, dass die Verbindung nicht richtig geschlossen wird?

Danke im Voraus für jeden Tip

Viele Grüße
Mirco
 

Lesen sie die antworten

#1 Thomas Bandt
01/08/2009 - 11:37 | Warnen spam
Mirco Kaminski schrieb:
Serverfehler in der Anwendung /.
Timeout abgelaufen. Das Zeitlimit 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.
Beschreibung: Unbehandelte Ausnahme beim Ausführen der aktuellen
Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere
Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler
im Code verursacht wurde.

[...]

Hier ist die entsprechende Routine:

public SqlDataReader GetArtikelItems(string cKapitel,string cKomma)
{

SqlConnection myConnection = new
SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]);
string cSQL = "SELECT ..
SqlCommand myCommand = new SqlCommand(cSQL, myConnection);
myCommand = new SqlCommand(cSQL, myConnection);
myCommand.CommandType = CommandType.Text;
myConnection.Open();
SqlDataReader result =
myCommand.ExecuteReader(CommandBehavior.CloseConnection);
return result;
}

-

Ich habe die Vermutung, dass die Verbindung nicht richtig geschlossen wird?



Natürlich nicht, du schließt sie ja auch nicht. Damit
öffnest du bei jedem dieser Aufrufe eine neue Verbindung
und irgendwann ist die Anzahl der verfügbaren Verbindungen
gleich Null.

1. Regel: Verbindungen zur Datenbank so spàt wie möglich
öffnen und so früh wie möglich schließen. Verbindungen
werden gepoolt, d.h. in einer Art Cache verwaltet, so dass
es _keinen_ Nachteil hat, die Verbindungen zu schließen.

2. Regel: Niemals einen SqlDataReader zurückgeben, sondern
auch diesen schließen.

3. Regel: using verwenden. Damit werden die Objekte immer
geschlossen, auch wenn ein Fehler auftritt, weil das vom
Compiler in ein try/catch/finally umgesetzt wird.

Beispielcode:
http://blog.thomasbandt.de/39/166/d...nbank.html

(der zweite Code-Abschnitt)


Gruß, Thomas [MVP ASP/ASP.NET]
http://www.69grad.de - Die ASP.NET-Profis aus Nürnberg
http://blog.thomasbandt.de - Privates Blog

Ähnliche fragen