2012-07-25 8 views
8

W środowisku wielu użytkowników: Jak upewnić się, że wszyscy klienci widzą zmiany? Jaki jest najlepszy sposób na zrobienie tego?Technika (y) w aplikacji C# multiuser, w której wszyscy klienci mają aktualne dane z centralnej bazy danych

W przeszłości stworzyłem aplikację C# i zainstalowałem ją na 2 komputerach. Połączono go z centralnym serwerem SQL Express (aplikacja kliencka pracowała z Entity Framework Code First jako ORM). Gdy klient1 dodał rekord do bazy danych, nie było to widoczne bezpośrednio dla klienta2. Tylko wtedy, gdy klient2 ponownie pobierze wszystkie dane (twarde odświeżenie), zmiana była widoczna.

Teraz szukam rozwiązania, w jaki sposób można lub należy wykonać tę "synchronizację" (?). Lubię pracować Entity Framework Code Po pierwsze, byłoby miło, że rozwiązanie to może utrzymać. Również aplikacja jest nadal w bardzo wczesnym stadium. Pomyślałem, mając centralną bazę danych i wielu klientów łączących się z nią, ale nie jestem pewien, czy to dobre rozwiązanie. Jeśli twoje sugestie/rozwiązania wymagałyby aplikacji serwera centralnego, do której klienci się łączą (i gdzie aplikacja serwera obsługuje bazę danych), nie stanowiłoby to problemu.

Jeśli to możliwe, podstawowe rozwiązanie przykładowe lub podstawowy kod pokazujący jak zawsze pracować z najnowszymi danymi mógłby być bardzo pomocny!

Podobne pytania:

z góry dzięki

Odpowiedz

2

To zależy od środowiska i danych, które są zarządzającej i architektury ciebie chcieć.

Jeśli jest OK/dopuszczalne, aby klienci mieli kopie danych, z którymi mogą pracować, muszą pracować z danymi, gdy nie są połączeni z serwerem centralnym, wtedy można użyć programu Sync Framework.

Będziesz mieć swój centralny SQL Server, jak zwykle, i korzystać z Sync Framework do synchronizacji z klientami.

Można by napisać „Provider”, który zdecyduje, jak rozwiązać zmiany wprowadzone do tych samych danych przez różnych klientów, itp

byś umieścić SQL Express (lub ewentualnie LocalDB (nowa nazwa dla SQLCE)) na komputerach klienckich.

Następnie wykonaj model/kod jednostki Entity, aby uzyskać dostęp do lokalnej bazy danych zamiast centralnej.

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

Inaczej jest w dół do projektowania i wdrażania kilka „warstw” oraz po Ukazuje Internet/database/Architektura SOA.

Miła wolne źródło:

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

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

Kilka przydatnych książki:

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

dzięki za sugestię. Osobiście nie jest to dobry sposób na pracę. Aplikacja kliencka ładuje wszystkie dane (z powodu siatki i przeszukiwania siatki), więc oznacza to, że localDB ma całą kopię serwera sql (express). tam już widzę ograniczenia (np .: maksymalna strona bazy danych z localDB vs sql server vs sql express). Jakieś inne sugestie? – juFo

1

Innym rozwiązaniem jest stworzenie "interfejs" dla bazy danych i każdego put operacja przesyłania danych od niektórych klientów może powiadamiać innych klientów. Możesz wdrożyć taki interfejs przez WCF za pomocą wywołań zwrotnych. Nie mam prostego kodu dla całego rozwiązania architektury ... Jeśli będziesz zadawać bardziej konkretne pytania dotyczące budowania aplikacji n-warstwowych z WCF, spróbuję pomóc.

Powiązane problemy