Возможное решение 1
Одна вещь, которую мы делаем, - это создание централизованного процесса, который выполняет работу.В настоящее время у нас есть служба Wcf, которая работает в InstanceContextMode.Single
... в основном синглтон-сервисе.
Когда работа была назначена, она обновит ее в базе данных, чтобы отразить, что она была назначена с идентификатором запрашивающего или просто значением, которое говорит, что она назначена, если вам все равно, кто ее получает.
Возможное решение 2
Вы можете использовать оптимистичный параллелизм в NHibernate для этой таблицы, в которой хранятся задачи.Вам понадобится столбец, чтобы показать, что он был назначен.В этой таблице вы будете искать только те задачи, которые не были назначены.Если вы перейдете к обновлению задачи в базе данных, и кто-то уже захватил эту задачу и обновил ее, вы получите исключение StaleObjectException при обновлении.
Я никогда не использовал оптимистичный параллелизм в NHibernate, но, похоже, чтоРешение может работать.Я не уверен, что некоторые процессы не будут нуждаться в работе, и я думаю, что вам придется заново инициализировать сеанс, когда этот объект брошен.
По моему мнению, вариант 1 или что-то похожее на эту модельработает лучше всего.