sp_suresh Ответов: 2

Как заблокировать объект приложения в C# web


Я создал веб-приложение, в котором приложение не создается и не сохраняется в базе данных .Когда пользователь Entry opertator смотрит на панель мониторинга, он пытается получить доступ к приложению, но если какой-либо другой пользователь использует это приложение, то это создает проблему.Как избежать правильного способа для нескольких пользователей не следует использовать один и тот же объект.

Что я уже пробовал:

Мы пытались установить блокировку с помощью базы данных, но в базе данных это создает проблемы при разблокировке
Также я использовал методы блокировки, но в данном случае как заблокировать этот объект приложения, чтобы ни один другой пользователь не мог его использовать .
Поэтому, пожалуйста, помогите мне найти правильное решение.
заранее спасибо....

[no name]

Поскольку мы вообще ничего не знаем о вашем проекте или вашей проблеме, перепроектируйте свой проект таким образом, чтобы совместное использование объектов не вызывало проблем.

F-ES Sitecore

Проблема в том, что веб не имеет состояния, поэтому ваш сайт не знает, кто что редактирует или смотрит. Если человек начинает что-то редактировать, а затем уходит на обед или просто не сохраняет или не завершает редактирование, то этот элемент остается заблокированным навсегда.

Лучшее решение вместо блокировки элементов - иметь метку времени для ваших записей. Итак, если вы редактируете «Человек А», тогда запись этого человека в базе данных будет иметь столбец с меткой времени, который ваш сайт будет читать и сохранять. При сохранении записи вы проверяете, что метка времени такая же, как и раньше, сохраняете данные и обновляете метку времени. Если вы обнаружите, что временная метка не совпадает, это означает, что кто-то другой отредактировал данные тем временем, чтобы вы могли сообщить об этом пользователю, когда они попытаются сохранить, и дать им соответствующие варианты для разрешения конфликта, например, отменить свои изменения или отменить изменения, сделанные предыдущим человеком, или как-то объединить их.

sp_suresh

F-ES Sitecore ....Большое вам спасибо и извините за задержку .Как вы и предлагали, мы уже вели измененный журнал.Таким образом, мы можем отслеживать также изменения, сделанные пользователем. Также мы проверим ваше решение.....

2 Ответов

Рейтинг:
1

Midi_Mick

Я думаю, что то, что вы ищете здесь, - это именованный мьютекс-они работают как блокировки, но через границы процесса. Есть небольшая работа, связанная с обучением их правильной настройке, но если вы посмотрите документацию MSDN, я уверен, что вы доберетесь туда. Хорошей отправной точкой было бы здесь[^].


sp_suresh

спасибо и извините за задержку.Мы изучаем мьютекс...

Рейтинг:
1

#realJSOP

Ваша проблема, вероятно, заключается в том, что запись заблокирована в БД, но по какой-то причине она может быть не разблокирована. Вы также недостаточно продумали свою стратегию блокировки.

Во-первых, поддерживайте в БД какое-то указание на то, когда и кем была заблокирована запись. Тогда вы можете:

0) Когда сеанс браузера закончится, попросите его разблокировать все записи, заблокированные пользователем.

1) Установите своего рода тайм-аут, который позволит вам автоматически разблокировать данную запись.

2) Включите в сохраненный процесс код, который не позволит пользователю обновлять запись, если только этот пользователь в данный момент не заблокировал ее.

Никто здесь не может дать ничего, кроме совета. То, как вы разрабатываете свое решение для блокировки/разблокировки, полностью зависит от А) базы данных и Б) характера веб-сайта.


sp_suresh

спасибо за ваше решение и извините за задержку .Как вы и предлагали, мы должны создать сервис, который будет отслеживать, какое приложение заблокировано и со временем.Так что после определенного периода тайм-аута объект будет освобожден ...хорошо...мы попробуем и этот путь ...Но есть ли какое-либо другое решение, чтобы избежать обслуживания ?....спасибо