my.ASPItalia.com
ASP.NET
|
HTML5
|
LINQ e Entity Framework
|
Silverlight
|
Windows Phone
|
.NET Framework
|
Libro WP7
|
Libro HTML5
|
Corso on-site HTML5
Iscriviti
Login
Newsletter
Home
Articoli
Script
Notizie
FORUM
Blogs
Lab
Media
Tutorials
Corsi
Libri
Tags
Tutti i forum
Ricerca
FAQ
Fai una domanda
Connessioni database
in
.NET Framework
>
Windows Communication e Workflow
Ultimo messaggio
JoeRuspante
il 10 marzo 2009 alle 15:45
350 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
Rispondi
Quoting
Ricciolo
il 10 marzo 2009 alle 22:16
5.513 messaggi
dal 26 febbraio 2001
Contributi
blogs.aspitalia.com
|
Blog
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
Rispondi
Quoting
JoeRuspante
l'11 marzo 2009 alle 04:42
350 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!
Rispondi
Quoting
Ricciolo
l'11 marzo 2009 alle 19:14
5.513 messaggi
dal 26 febbraio 2001
Contributi
blogs.aspitalia.com
|
Blog
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
Rispondi
Quoting
Salto rapido
Ultimi messaggi
Tutti i forum
Ricerca
Utenti online
ASP.NET
ASP.NET 2.0
ASP.NET 3.5
ASP.NET 4.0
.NET Framework
Silverlight
Windows Phone
Windows Presentation Foundation e WinForms
Windows Communication e Workflow
ASP - avanzato
ASP - base
SQL Server e MySQL
Libri
Hosting
Altri linguaggi e tecnologie
Windows Server, IIS & Security
E-commerce
OT
Commenti: blogs e notizie
Eventi
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.
In primo piano
Speciale web mobile: costruire applicazioni con ASP.NET, jQuery Mobile e PhoneGap
Speciale Silverlight 5: tutte le novità
Rilasciato il bollettino MS11-100 per risolvere i problemi di attacchi DoS di ASP.NET
I più letti di oggi
Windows Phone 7.5 Developer Day: costruire un'app in 60 minuti
Windows Phone 7.5 Developer Day: costruire app con Visual Studio 2010 e Windows Phone Runtime
Zip e ASP.NET
Windows 8 su ARM: avrà il desktop, Office e il connected standby
Windows Phone 7.5 Developer Day: marketplace e strumenti per monetizzare le app
Speciale web mobile: costruire applicazioni con ASP.NET, jQuery Mobile e PhoneGap
Visual Basic 2010
Media
Windows Phone 7.5 Developer Day: marketplace e strumenti per monetizzare le app
Windows Phone 7.5 Developer Day: costruire app con Visual Studio 2010 e Windows Phone Runtime
Tutti i media
In evidenza
Speciale web mobile: costruire applicazioni con ASP.NET, jQuery Mobile e PhoneGap
Speciale Silverlight 5: tutte le novità
Sviluppare applicazioni per Windows Phone: scopri come fare con il nostro nuovissimo libro!
Sviluppa le applicazioni del futuro oggi: impara con il nostro libro HTML5 Espresso!
Community Days 2012 - Milano
Windows 8 su ARM: avrà il desktop, Office e il connected standby
Rilasciato Entity Framework 4.3
Sovrascrivere il tipo di esecuzione di una query PLINQ
MISC
I nostri autori
Collabora con noi!
Media Kit - Pubblicità sul nostro network