2012-07-25 15 views
8

In un ambiente multiutente: Come ci si assicura che tutti i client vedano le modifiche di eachothers? Qual è il modo migliore per farlo?Tecnica/i in un'applicazione multiutente C# in cui tutti i client hanno i loro dati aggiornati da un database centrale

In passato ho creato un'applicazione C# e l'ho installata su 2 PC. Si collegava a un server SQL Express centrale (l'applicazione client funzionava con Entity Framework Code First come ORM). Quando client1 ha aggiunto un record al database, questo non era direttamente visibile a client2. Solo se il client2 ha recuperato tutti i dati (hard refresh) la modifica era visibile.

Ora sto cercando una soluzione su come questa "sincronizzazione" (?) Possa o debba essere eseguita. Mi piace lavorare su Entity Framework Code Innanzitutto, sarebbe bello che una soluzione potesse mantenerlo. Anche l'applicazione è ancora in una fase molto precoce. Ho pensato di avere un database centrale e più client che si collegano ad esso, ma non sono sicuro che questa sia una buona soluzione. Se i vostri suggerimenti/soluzioni richiederebbero un'applicazione server centrale a cui i client si connettono (e dove l'applicazione server gestisce il database) questo non sarebbe un problema.

Se possibile, una soluzione di esempio di base o un codice di base che mostra come lavorare sempre con i dati più recenti potrebbe essere molto utile!

domande simili:

grazie in anticipo

risposta

2

Dipende dal vostro ambiente ei dati si gestisce e l'architettura si volere.

Se è OK/accettabile lasciare che i client dispongano di copie dei dati con cui possono lavorare, devono lavorare con i dati quando non sono connessi al server centrale, quindi è possibile utilizzare Sync Framework.

Avresti il ​​tuo SQL Server centrale come al solito e utilizzi Sync Framework per sincronizzarlo con i client.

Si potrebbe scrivere un "Provider", che avrebbe deciso come risolvere le modifiche apportate agli stessi dati da diversi clienti, ecc

si avrebbe dovuto mettere SQL Express (o forse LocalDB (nuovo nome per SQLCE)) sulle macchine client.

Quindi eseguire il modello/codice Entity Framework per accedere al database locale anziché a quello centrale.

http://blogs.msdn.com/b/sync/archive/2008/06/24/sample-sql-express-client-synchronization-using-sync-services-for-ado-net.aspx

In caso contrario si è scesi a progettazione e implementazione di alcuni "livelli" e seguendo un Internet Distributed/Database Architecture/SOA.

Una bella risorsa gratuita:

http://msdn.microsoft.com/en-us/library/ff650706.aspx

http://mtechsoa2011.blogspot.co.uk/2011/04/soa-vs-distributed-internet_27.html

Alcuni libri utili:

http://www.amazon.co.uk/Service-Oriented-Architecture-Concepts-Technology-Computing/dp/0131858580/ref=sr_1_1?s=books&ie=UTF8&qid=1343295432&sr=1-1

+0

grazie per il vostro suggerimento. Personalmente questo non mi sembra un buon modo di lavorare. L'applicazione client carica tutti i dati (a causa di una griglia e cerca nella griglia), quindi ciò significa che un DB locale ha un'intera copia di un server sql (espresso). lì vedo già delle limitazioni (ad es .: sito di database max da localDB vs sql server vs sql express). Qualche altro suggerimento? – juFo

1

altra soluzione è creare un "interfaccia" per il database e ogni put l'operazione di dati da parte di alcuni client può notificare altri client. È possibile implementare tale interfaccia da WCF con i suoi callback. Non ho un codice semplice per l'intera soluzione di architettura ... Se farai una domanda più concreta sulla creazione di un'applicazione n-tier con WCF, cercherò di aiutarti.

Problemi correlati