OptimisticConcurrencyException с System.Web.Providers

Я использую новые универсальные поставщикиот Microsoft для сеанса в SQL Server. Старая реализация сеанса на SQL Server требовала задания (запускаемого каждую минуту) для очистки сеансов с истекшим сроком действия. Новый делает эту проверку и очищает при каждом запросе. Поскольку я на самом деле работаю в SQL Azure, у меня нет агента SQL для планирования заданий, так что это звучит как разумный способ (нет, я не хочу платить за кэш Azure за сеанс).

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

System.Data.OptimisticConcurrencyException: Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.
   at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
   at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
   at System.Web.Providers.DefaultSessionStateProvider.PurgeExpiredSessions()
   at System.Web.Providers.DefaultSessionStateProvider.PurgeIfNeeded()
   at System.Web.SessionState.SessionStateModule.BeginAcquireState(Object source, EventArgs e, AsyncCallback cb, Object extraData)
   at System.Web.HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

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

6
задан pnuts 16 November 2015 в 22:26
поделиться