Avatar billede mickni33 Nybegynder
22. december 2009 - 16:24 Der er 9 kommentarer og
1 løsning

Connection pool

Jeg forsøger at lave en connection pool (klienterne kommer ind via webservice).
Da klienterne er logget på i længere tid, har jeg sørget for at have en AccessClass som har en singleton så der kun bliver oprettet forbindelse med en connectionString én gang...

Det fungere meget fint når det kun er én klient..
Men hvad gør jeg når der logger flere klienter på de kommer jo til at bruge den samme forbindelse?? det er vel ikke meningen vel?

Eller kan de godt bruge samme instance og så må jeg lave en lock når jeg bygger min SQL streng og eksekvere(kan være forskellig for hver forespørgelse)

Er ikke helt med på hvordan flow og design skal være ved sådan en funktionalitet
Avatar billede arne_v Ekspert
22. december 2009 - 16:30 #1
Hmmm.

Du ved godt at alle de gaengse ADO.NET providere kommer med indbygget connection pool ?
Avatar billede mickni33 Nybegynder
22. december 2009 - 16:35 #2
JO men det er fordi jeg også skal bruge noget application role og så har jeg læst at man skal sætte connectionpool=false
Avatar billede arne_v Ekspert
22. december 2009 - 16:37 #3
Hvis de indbyggede pools ikke duer kan du jo lave din egen. Singleton som holder pool. Reserve og release metoder. Ikke saa svaert.

Hvad er problemet med application role og de indbyggede pools?
Avatar billede mickni33 Nybegynder
22. december 2009 - 16:39 #4
har ikke nærlæst hvorfor app role oog app pool ikke spiller sammen..

har du et eksempel på sådan en singleton klasse
Avatar billede mickni33 Nybegynder
22. december 2009 - 16:45 #5
altså hvergang der logger en ny klient på ...så kører de jo på samme Singleton Instance, hvor en connection er oprettet....

Men det bliver jo aldrig en pool da det altid bare vil være samme Instance, og det giver vel problemer når der skal laves SQL queryes af flere klienter
Avatar billede arne_v Ekspert
22. december 2009 - 16:46 #6
Nej, men det er vel mindre end 50 linier kode.

Singleton pattern er kendt.

Saa skal du have en reserve og en release metode.

Og saa skal du have en pool f.eks. en List<IDbConnection>.

Og de to metoder skal nok bruge lock(pool) for at undgaa concurrency problemer.
Avatar billede arne_v Ekspert
22. december 2009 - 16:56 #7
En connection pool skal jo have flere connectiosn saa flere brugere kan fa anoget lavet i parallel.

Jeg mener ioevrigt at de indbyggede connection pools faktisk bruger en pool per database credentials.
Avatar billede arne_v Ekspert
10. januar 2010 - 04:30 #8
mickni ?
Avatar billede mickni33 Nybegynder
11. januar 2010 - 15:15 #9
jamen jeg gjorde som du sagde Arne_v en list af connections og en lock på getConnectionFromList() og en på ReleaseConn()

Så læg lige et svar :-)
Avatar billede arne_v Ekspert
11. januar 2010 - 15:23 #10
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester