2015-03-18 1 views
0

В одном из наших приложений ASP.Net мы должны назначить жалобы клиентов для поддержки руководителей. Жалобы клиентов хранятся в таблице базы данных. Мы используем первый подход сущностного кода.Как убедиться, что уникальная запись возвращается каждому параллельному запросу из метода действий контроллера asp.net

После того, как исполнительный директор службы технической поддержки войдет в систему, ему будет предоставлена ​​жалоба (вид) клиента с одной из возложенных на него жалобы. Как только он завершает формальности жалобы и представляет информацию, он получит следующую жалобу, назначенную ему, и он продолжит то же самое до конца дня.

Задача здесь состоит в том, что одновременно работает N количество поддерживающих менеджеров, и одновременно запускается один и тот же метод действий (AssignCustomerComplaint). Теперь, как мы убедимся, что каждый исполнительный директор получит уникальную жалобу, которая не назначена.

Примечание: У меня уже есть поле в таблице базы данных, чтобы сказать, назначена ли жалоба руководителю службы поддержки или нет (сохранение идентификатора пользователя службы поддержки). Поэтому в бизнес-логике я проверяю, назначена ли жалоба, а если нет, то я обновляю поле userid с текущим пользователем и затем возвращаю представление с помощью модели. Но в некоторых сценариях из-за одновременных запросов одна и та же жалоба возвращается различным руководителям поддержки (последний запрос снова обновляет поле userid). Очевидно, что к этой записи не применяется блокировка.

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

ответ

0

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

Однако, если вы просто сохраняете жалобу, а затем планируете фоновый процесс, чтобы вернуться назад и назначить неназначенные жалобы на повторы в порядке, то вы эффективно удалите проблемы параллелизма из уравнения.

+0

Привет, Крис, ваше предположение вокруг фонового процесса будет работать, но у нас нет фонового процесса в движении, чтобы назначить жалобы для поддержки руководителей. Теперь у нас есть метод действий, который заботится о назначении жалоб руководителям поддержки. Поскольку эти запросы являются параллельными к тому времени, когда мы назначаем идентификатор пользователя в поле и обновляем, другой поток также присваивает и обновляет одну и ту же запись. В этом причина дублирования жалоб рассматривается двумя руководителями. – VinothNair

+0

Это моя точка зрения. Я предлагаю вам прекратить назначать свой метод действий и создавать консольное приложение или что-то, что может обрабатывать операцию назначения для жалоб навалом, а не по одному за раз. Если вы не хотите использовать подход к консольному приложению, вы можете создать для этой цели еще одну конечную точку действия и использовать что-то вроде Revalee (http://revalee.sageanalytic.com/), чтобы запланировать, чтобы эта конечная точка попала с определенной частотой ты желаешь. Ключ с любым из этих подходов, однако, заключается в том, чтобы подавать жалобы не на синхронизацию с их индивидуальным созданием. –

Смежные вопросы