Sto utilizzando il nuovo Universal Providers da Microsoft per la sessione in SQL Server. La vecchia implementazione della sessione su SQL Server richiedeva un lavoro (in esecuzione ogni minuto) per cancellare le sessioni scadute. Il nuovo fa questo controllo e cancella ogni richiesta. Poiché in realtà sto eseguendo in SQL Azure, non ho SQL Agent per pianificare i lavori, quindi questo suona come un modo ragionevole per farlo (no, non voglio pagare per Azure Cache per la sessione).OptimisticConcurrencyException con System.Web.Providers
Il problema è quando più utenti accedono al sito contemporaneamente, stanno entrambi tentando di cancellare le stesse sessioni scadute contemporaneamente e il secondo ottiene un'eccezionale eccezione di concorrenza.
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)
Sto utilizzando ELMAH per la registrazione degli errori e questo si sta visualizzando con una certa frequenza. Prima che provi a configurare ELMAH per ignorare gli errori, qualcuno sa in che modo fermare gli errori in primo luogo? C'è qualche configurazione con i nuovi provider che mi manca?
Anche io sto vivendo lo stesso problema. Hai scoperto come risolvere questo problema? L'unico modo che posso pensare è di decompilare il codice? Qualsiasi suggerimento – chugh97
Il meglio che posso dire, Microsoft non supporta realmente questi provider. Il cinico in me dice che stanno cercando di spingere gli utenti di Azure a pagare per la cache. Mi piacerebbe che qualcuno mi dimostrasse che non sbaglio. Alla fine, ci siamo arresi e siamo tornati a un provider SQL Server diretto. Avevamo già bisogno di un altro server per la pianificazione di altri lavori non collegati, quindi abbiamo inserito il lavoro delle sessioni scadute di compensazione anche lì. Scusa, non ho niente di meglio da segnalare. – icrf
Hai risolto questo problema? Sto correndo lo stesso problema io stesso. – onit