[ KizaBG @ 14.12.2008. 00:02 ] @
E ovako. Imam aplikaciju pisanu u VS .NET 2005, C# . U pitanju je Windows aplikacija. Ali ide preko SOAPA, na bazu: MS SQL 2005.


Instalirao sam je kod klijenta, i sve radi ok, osim par (neugodnih gresaka) kao sto je jedna od ovih.

Desava se da kada 2-3 korisnika rade na aplikaciji, i posle sat vremena , jos neki korisnik pokusa da se prijavi, prilikom Logovanja dobije se ova greska.

Time out expired. The time out period elapsed prior to obtaining connection from the pool. This may have occured because all pooled connections were in use max pool size was reached

Citao sam par sati na forumima sta moze da bude, i uglavnom se navodi da je razlog ili veliki broj nezatvorenih konekcija, ili sporost mreze.

Da li je neko imao ovaj problem i kako ga resiti ?

ja sam u connection stringu sada dodao ovo : Max Pool Size=100;Connect Timeout=120, ali ne znam da li ce resiti problem?

Citao sam na forumu, neki Indijac savetuje da se u finally blok (u funkciju logovanja) ubaci sledece :


if sqlcon is notnothing

sqlcon.dispose : sqlcon = nothing;

Pozdrav, hvala unapred
[ Koce @ 15.12.2008. 08:59 ] @
pa u principu si ok napisao ovo za cnn string: Max Pool Size=100;Connect Timeout=120
samo sto bih ja, mada to zavisi od aplikacije, zatvarao konekciju nakon upotrebe, npr nesto slicno ovom:

try
cnn.open
pa nesto radis
.....
if Cnn.State = System.Data.ConnectionState.Open Then Cnn.Close()
Catch ex As Exception
pa obradis gresku
Finally
If Not Cnn Is Nothing Then
if Cnn.State = System.Data.ConnectionState.Open Then Cnn.Close()
Cnn.Dispose()
Cnn = nothing
End If
end try

[ KizaBG @ 15.12.2008. 22:44 ] @
@koce: hvala na odgovoru. Aplikacija i jeste pisana na pocetku tako. sa otvatranjem i zatvaranjem konekcije u finally bloku.

Ali mi je onda jedan drugar pokazao, kako on radi, i taj kod mi se ucinio mnogo laksim i brzim.

Evo, prvo ti saljem jedan primer fukcije, gde ces videti da konekcija nije zatvorena, a onda ti saljem i klasu "Database Manager" da vidis kako i ona izgleda

FUNKCIJA

public void Delete(int id)
{

try {

Database db = DatabaseManager.Database();

DbCommand cmd = DatabaseManager.GetCommand("Kandidat_Delete");

cmd.Parameters.Add(new SqlParameter("@KandidatID", id));

db.ExecuteNonQuery(cmd);
}

catch (Exception ex)
{ logger.Error(ex);
throw ex;}
}

klasa DATABASE MANAGER


namespace ManageProServer.BiznisObjekti.Configure

{
/// <summary>
/// Provides database and commands
/// </summary>

internal static class DatabaseManager
{
/// <summary>
/// Gets the database.
/// </summary>
/// <returns></returns>
public static Database Database()

{
return new SqlDatabase(ConnectionManager.GetConnectionString());

}

/// <summary>
/// Gets the command.
/// </summary>
/// <param name="commandName">Name of the command.</param>
/// <returns></returns>

public static DbCommand GetCommand(string commandName)

{
return Database().GetStoredProcCommand(commandName);

}

}

}


I rekao mi da nema potrebe da zatvaram konekciju, jer DatabaseManager sve to radi ?

Nisam siguran, ali mislim da mi je takodjer rekao ,da ove 2 biblioteke vode racuna o tome:

using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using Microsoft.Practices.EnterpriseLibrary.Data;


Sta ti mislis ?

pozdrav i puno hvala