2012-07-25 20 views
8

En un entorno multiusuario: ¿Cómo se asegura de que todos los clientes vean cambios mutuos? ¿Cuál es la mejor manera de hacer esto?Técnica (s) en una aplicación multiusuario C# donde todos los clientes tienen sus datos actualizados desde una base de datos central

En el pasado creé una aplicación C# y la instalé en 2 pc. Se conectó a un servidor SQL Express central (la aplicación cliente trabajó con Entity Framework Code First como ORM). Cuando el cliente1 agregó un registro a la base de datos, esto no fue visible directamente para client2. Solo si el cliente2 recuperó todos los datos (actualización completa), el cambio fue visible.

Ahora estoy buscando una solución sobre cómo esta 'sincronización' (?) Puede o debe hacerse. Me gusta trabajar en Entity Framework Code Primero, sería bueno que una solución pudiera mantener esto. También la aplicación todavía está en una etapa muy temprana. Pensé en tener una base de datos central y varios clientes conectados a ella, pero no estoy seguro de si esta es una buena solución. Si sus sugerencias/soluciones requieren una aplicación de servidor central donde los clientes se conectan (y donde la aplicación del servidor maneja la base de datos) esto no sería un problema.

Si es posible, ¡sería muy útil una solución de muestra básica o algún código básico que muestre cómo trabajar siempre con los últimos datos!

preguntas similares:

gracias de antemano

Respuesta

2

Depende de su medio ambiente y los datos que se está administrando y la arquitectura se querer.

Si es correcto/aceptable dejar que los clientes tengan copias de los datos con los que pueden trabajar, necesitan trabajar con los datos cuando no están conectados al servidor central, entonces puede usar Sync Framework.

Tendría su servidor SQL central como de costumbre, y usaría Sync Framework para sincronizar con los clientes.

Se podría escribir un "proveedor" que decidir cómo resolver los cambios realizados en los mismos datos por diferentes clientes, etc.

Usted tendría que poner SQL Express (o posiblemente LocalDB (nuevo nombre para SQLCE)) en las máquinas del cliente.

Luego haga su Modelo/Código de entidad de Entidad para acceder a la base de datos local en lugar de a una central.

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

de lo contrario es a diseñar e implementar algunos "niveles" y siguiendo un Distributed Internet/Arquitectura Base/SOA.

Un buen recurso libre:

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

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

Algunos libros útiles:

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

gracias por su sugerencia. Personalmente, esto no parece una buena forma de trabajar. La aplicación cliente carga todos los datos (debido a una cuadrícula y para buscar en la cuadrícula), por lo que significa que un localDB tiene una copia completa de un servidor sql (exprés). allí ya veo limitaciones (por ejemplo, el sitio de base de datos máximo de localDB vs sql server vs sql express). ¿Cualquier otra sugerencia? – juFo

1

otra solución es crear una "interfaz" de su base de datos y cada puesto la operación de datos de algún cliente puede notificar a otros clientes. Puede implementar dicha interfaz mediante WCF con sus devoluciones de llamada. No tengo un código simple para la solución de arquitectura completa ... Si va a hacer una pregunta más concreta sobre la construcción de la aplicación n-tier con WCF, intentaré ayudar.

Cuestiones relacionadas