2010-02-04 18 views
5

Mam aplikację C# z NHibernate, która musi wykonywać niektóre operacje przez SQL Server DB.Mechanizm blokujący proces na wielu komputerach

Naszym celem jest uruchamianie tej aplikacji wiele razy w tej samej maszynie, a także w innych maszynach.

Rzeczywiście, aplikacja wstawia wiersz w tabeli SQL i sprawdza, czy pierwszy wiersz z minimalną datą jest wierszem z prawidłowym PID i nazwą komputera, aby aplikacja ustawiła blokadę i wykonała pracę.

Mamy problemy z tą logiką, ponieważ aplikacja musi również usunąć blokadę innych aplikacji, jeśli aplikacja, która zatrzymała blokadę, uległa awarii.

Jakieś wskazówki dotyczące zmiany architektury zamka?

Problem polega na tym, że aplikacja może działać na wielu komputerach.

Odpowiedz

2

Co powiesz na zarządzanie blokadą w DB? Możesz mieć tabela/procedura składowana, w której każda uruchomiona instancja rejestruje się, otrzymuje unikalny identyfikator i używa procedury przechowywanej do wykonania blokady & za darmo. (Ta sama technika, co zapobieganie wielu logowania dla pojedynczego użytkownika z kilku maszyn).

+0

Wolę nie używać StoredProcedures, ponieważ w mojej konfiguracji Nhibernate nie mam żadnych. –

+0

Mam na myśli wdrożenie tego poza standardowym zakresem danych, jako osobnego modułu razem. – Amirshk

2

Albo

  • Mają (serwer) proces, który zarządza Zamki - wszystkich klientów zarejestrowanych i żądań blokad z tego serwera.
  • Pessimistic offline locking

I zostały wdrożone to w obie strony.

Blokady offline mogą współpracować z bazami danych, ale istnieje możliwość, że można wprowadzić wymuszenie, jeśli zbyt wiele procesów stale czeka na blokadę (chociaż przyzwoity serwer bazy danych powinien buforować informacje). Upewnij się również, że używasz poziomu izolacji transakcji ReadCommited podczas robienia czegokolwiek z tą tabelą i bądź przygotowany na zakleszczenia.

+0

Dam ci spróbować ... –

Powiązane problemy