2013-10-03 4 views
0

Я создаю приложение winform, которое должно работать в избыточном Environement (Main и Backup).WCF Service concurrency hasnling

Оба приложения должны запускать 7/7 24/24, они подключаются к серверу ODATA для получения списка объектов.

Что я хочу достичь - это заблокировать запись объекта, подлежащую обработке, тогда только одно приложение (сначала получите команду для отправки команды) обрабатывает его и продолжает процесс.

Вот что я угадываю.

метод проектирования AcquireLock, который передает одно из следующих значений обрабатываемому объекту: AcquireLock_Attempt = устанавливается в первой строке кода метода AcquireLock. AcquireLock_ACK = если объект не был заблокирован параллельным приложением. AcquireLock_NAK = либо объект уже заблокирован, либо произошла ошибка.

Пожалуйста, не стесняйтесь поделиться со мной своим опытом, если вы уже сталкиваетесь с подобным сценарием.

N.B: 1- мой сервис настроен на вызов. 2- обработка между приобретением блокировки и установкой нового состояния (Cmd_Send_OK, Failed_Transaction, ..) может находиться в диапазоне от миллисекунд до нескольких секунд).

+0

_7/7 24/24_? Вы имеете в виду 24/7? –

+0

yes Томас 24/7 – xPridex

ответ

0

Ваш вопрос не очень ясен для меня, но для блокировки отдельных объектов из списка. Я предлагаю использовать блокировку строк таблицы sql-сервера в/во время транзакции критического раздела (даже чтение): его межпроцессный процесс и позволяет обрабатывать большие списки объектов. Смотрите обсуждение here

+0

i'am используя СУБД Mysql – xPridex

+0

http://dba.stackexchange.com/questions/15854/innodb-row-locking-how-to-implement – SalientBrain

0

Ваша служба WCF может быть украшен

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)] 
+0

И использовать Monitor.Lock или подобное для каждого объекта /Я бы? И это блокировка для одного процесса – SalientBrain