Connessioni database
JoeRuspante
JoeRuspante non è online. Ultima attività: 07/02/2010 12.31.05JoeRuspante
il 10 marzo 2009 alle 15:45
156 messaggi dal 08 febbraio 2009
Sto usando WCF con Data Access Application Blocks.

Volendo usare lo stesso DB per tutta l'applicazione, ho creato una classe privata ma che viene istanziata una sola volta (la classe Database dell'application block).

Poi, nei vari metodi (esposti con WCF), uso quel database per eseguire le query.

Quando ho più query all'interno dello stesso metodo, allora apro la connessione (db.CreateConnection) e la uso per tutti i vari DbCommand.
Al termine del metodo, prima di uscire, la chiudo.


Al di là di usare la "using" (visto che DbConnection la supporta), che succede se due utenti entrano nei metodi "in contemporanea"?

Il db, essendo su WCF, si arrangia e mi da due connessioni diverse, oppure mi da una connessione unica per le due sessioni?
Nel primo caso dovrebbe andare tutto bene, nel secondo, invece, essendo la connessione la stessa, quando il primo metodo la chiude, questa viene chiusa anche per l'altro utente...

Lo chiedo perchè ho un problema strano: a volte si inchioda tutta l'applicazione WCF e necessito il riavvio per sbloccare il tutto. Rifacendo le medesime operazioni, però, lavora bene. Per questo pensavo ad un problema di "concomitanza" fra due processi.

Non so, a questo punto forse è meglio se uso un Database per ogni metodo esposto, però così rischio che lo stesso servizio utilizzi più connessioni...


Come si gestisce "di solito" la cosa?

Grazie mille
RE: Connessioni database
Ricciolo
Ricciolo non è online. Ultima attività: 06/02/2010 11.33.28Ricciolo Top Poster
il 10 marzo 2009 alle 22:16
Non conosco nello specifico il block, ma credo che sotto usi comunque ADO.NET e le sue interfacce. Quindi se usi SQL puoi aprire tranquillamente più connessioni contemporaneamente, fino ad un massimo di 100, dopo di che chi apre una connessione resta in attessa fino a quando una si libera. Si libera quando viene fatta la close, quindi quello che devi fare è assicurarti che ogni oggetto che utilizzi, se implementa IDisposable dichiaralo con una bella using così sei sicuro di chiudere tutte le risorse, anche se qualcosa va storto.

Direi che quindi WCF non c'entra niente, anche se WCF dispone anch'esso di pool e limitazioni non mi sembra che tu faccia qualcosa di particolare. Per essere sicuro di basta guardare con sql management o con il profiler le connessioni attive e/o le query o eventuali dead lock, sempre se usi SQL. Dovresti infatti analizzare se va in timeout qualcosa e dove e si può dedurre meglio.

Ciao

Il mio blog
Homepage
RE: Connessioni database
JoeRuspante
JoeRuspante non è online. Ultima attività: 07/02/2010 12.31.05JoeRuspante
l'11 marzo 2009 alle 04:42
156 messaggi dal 08 febbraio 2009
Grazie mille.

Facendo un po' di test, ho notato una cosa molto strana e inaspettata.
In pratica sto gestendo un muletto, quindi il mio client si collega al server via wireless (lo specifico qualora ci possano essere 'cose particolari').
Quando leggo un bancale e gli dico "è sul camion", l'applicazione fa una serie di letture per vedere se c'è altro sul camion (tutte le letture avvengono lato server).

Quindi, più bancali metto sul camion, più letture sul DB vengono fatte (più o meno 4 query per ogni lettura).

L'applicazione ho verificato che ha "problemi" anche se c'è un solo muletto operativo, quindi anche senza concomitanze (per cui ho escluso problemi di cursori e concomitanze come credevo in precedenza).

Capita a volte che se metto sul camion 10 bancali, l'applicazione per aggiornarsi ci mette 2 secondi (e ci può stare contando che ho 10 bancali, una rete wireless, ...).
Se nel giro di poco tempo ci aggiungo un bancale, per aggiornarsi ci mette 2 minuti!
Poi, ne aggiungo un altro e ci mette di nuovo qualche secondo...

Insomma, sembra quasi che "in qualche situazione" l'applicazione ci metta una marea ad aggiornarsi.

Non è una cosa che si verifica "facendo determinate operazioni", ma a intervalli irregolari di tempo capita che tutto si "blocchi" per poi ripartire.

Ora la mia principale "sospettata" è la rete wireless (magari mi si inchioda passando da un ponte radio all'altro, ma chissà!)...

Qualcuno ha qualche idea in più in proposito? Magari anche solo darmi un'idea di quali test io possa fare per verificare qualcosa (per esempio la rete)...

Grazie mille!
RE: Connessioni database
Ricciolo
Ricciolo non è online. Ultima attività: 06/02/2010 11.33.28Ricciolo Top Poster
l'11 marzo 2009 alle 19:14
Quello che ti consiglio è di attivare il tracing su WCF così almeno vedi se arrivano le chiamate e le eventuali exception che si possono verificare. Se non hai toccato niente delle impostazioni, escluso il problema di rete, dovresti vedere le timeout exception o a livello di wcf oppure di sql ecc.

Ciao

Il mio blog
Homepage

 

Torna al forum |   Feed RSS
ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
COMMUNITY
ULTIMI MESSAGGI
UTENTI ONLINE
MEDIA
IN EVIDENZA
MISC
Powered by .db Forums "Caesar Reborn" v. 2010.2.8