Newsgroup: it.comp.lang.visual-basic
Titolo: ADO net VS ADOvb6

salve a tutti
ho notato un comportamento un po strano (ma sicuramente sono io che trascuro 
qualcosa) fra due applicazioni.
In pratica c'� una applicazione scritta in VB.net 2005 che esegue alcune 
operazioni su un database access.
Tali operazioni sono richieste da altri programmi scritti in VB6 +ADO, 
tramite invio di comandi su un socket tcp.
Il problema � che i dati elaborati dalla applicazione net sul server, pur 
essendo sullo stesso database condiviso, non vengono visti subito dalle 
applicazioni client. E' come se ci fosse una sorta di transazione.
Anche se rieseguo forzatamente delle query di interrogazione sul server e 
vedo che i dati sono stati modificati, l'applicazione client sembra recepire 
la variazione con un tempo tecnico di volta in volta variabile. Certe volte 
subito, altre volte dopo 1 o due secondi.
Quanlocuno sa darmi qualche spiegazione.
Per quelli che mi scriveranno risposte del tipo usa sql server express che 
fa gi� tutto ci� che riguarda il funzionamento client server, vorrei 
avvisare che lo sto facendo ma al momento ho bisogno di "tamponare".
ciao e grazie a chi pu� darmi qualche dritta 

 ciao e grazie a chi può darmi qualche dritta
caso mai non dipende da ADOnet ma dal socket!
Come possiamo darti un aiuto se sei così vago?
e perchè non fare anche il server in vb6?...
Cioè...perchè aventurarsi in quello che non conosci?
Prima fai prove sviscera il problema!
Adonet sei SEMPRE e soltanto disconnesso
Chiede il database e disconnetti...ricevoi dal database e
disconnetti...
Inoltre Access come sql non ha ISTANZE infinite....se non distruggi
l'istanza access te la mette in coda (ma anche sql)...
Inoltre
il socket tcp risponde su UNA porta e Riceve su un
altra...tipicamente....
se questa porta è occupata dal client precedente...deve aspettare che
si liberi!
...e per far questo può passare un po di tempo!
le variabili sono mille! Che ne sappiamo dove c'è l'ighippo???
(potrebbe essere anche un segmento di rete congestionato....tanto per
dirne una....o un ip in conflitto...per dirne un altra!)

Che dipenda dal socket non credo, lo uso solo per far comunicare i due 
programmi e i messaggi sono istantanei (semplici comandi numerici).
Il client chiede al server di fare qualcosa, e successivamente il server 
avvisa il client di ver finito.
So che ADO net � slegato e la cosa mi sta pi� che bene, ma mi aspetterei che 
dopo aver aggiornato il database attraverso l'adapter la modifica sia 
visibile da subito anche dagli altri PC.
Invece accade che la modifica risulta visibile dopo un tempo che a mio 
avviso � piuttosto significativo anche 4 o 5 secondi (non sempre ma spesso 
lo fa).
La cosa mi da molto fastidio perch� l'utilizzatore non si rendo conto che 
alcuni record sono cambiati.
Provo add aggiungere altri dettagli per cercare di essere il pi� chiaro 
possibile, per cui faccio un esempio banale.
Supponiamo che il client (VB6) abbia bisogno di modificare un recod e quindi 
invoca il server con un comando opportuno.
In server net riceve il comando e per cercare di sviscerare l'arcano ho 
fatto cos�:
 -apro il Dataset con il Fill di un DataAdapter (solita procedura net ne pi� 
ne meno)
 -modifico il record (slegato)
 -Aggiorno il database con il relativo DataAdapter.
 - Per sincerarmi che sia avvenuto il cambiamento apro nuovamente il Dataset 
(nuovo oggetto istanziato e quindi pulito) e vedo che il record 
effettivamente  � cambiato.
- vio al client il messaggio che l'operazione � avvenuta con successo
Il client apre un RecorSet ( torniamo in VB6) ma il record non � cambiato.
Il tempo complessivo dell'operazione � dell'ordine di pochi centesimi di 
secondo, ma affinch� il client veda la modifica sul database passano anche 4 
o 5 secondi.
E' come se ci fosse una transazione che tiene nascosti i dati modificati per 
un certo tempo fino al verificarsi di un certo evento.
Eppure non so perch� ma sono pi� che convinto che si tratta di una cavolata. 

Aggiungo che non ci sono conflitti di IP o intasamenti di rete perch� il 
problema lo fa anche su due PC di prova (uno fa da server e l'altro da 
client) con collegamento diretto e senza nessun programma che utilizza la 
rete oltre ovviamente a quello che sto testando.
E lo stesso comportamento lo osservo anche usando lo stesso PC facendo 
girare sia il programma server che il client, connessi fra di loro con l'ip 
127.0.0.1