2016-04-22 48 views
9

我们已经有一段时间遇到了将数据保存在我们的SQL数据库中的问题。使用aspnet_state服务会话损坏

有时候,记录会保存有与该行其余部分不匹配的数据,这使得看起来在某种程度上,数据在被传递到数据库之前正在被其他事物(可能是另一个用户的数据)“交换” 。

我们确实使用了TransactionScopes以及隔离级别ReadCommitted这使我认为数据完整性问题在于应用程序而不是数据库级别。

我们确实广泛使用会话,并且我们开始认为腐败数据的时间与我们在白天部署系统更新的时间类似。

我们使用aspnet_state服务在应用程序重新启动时保持会话。

我们的用户依赖于终端会话,因此多个用户都登录到同一台服务器并通过浏览器启动系统。

我们过去注意到用户使用相同的域凭据登录,但我们现在相对确信用户现在使用唯一帐户登录。

99.9%的数据是正确的,但我们一直在努力理解可能会导致此间歇性数据完整性问题的原因。

我们现在限制部署到外面的工作时间处理死亡的痛苦,但这并非总是可能。

任何人都可以阐明为什么/如何发生这种情况?

编辑:我们现在已经分离出这对DAL层,看到SQL query returns incorrect value in multi user environment

回答

2

我最近一直在打这场!和有类似的问题对你写回的数据,大约95%是正确的。我查看了各种原因,主要原因是网络上的一些用户下载了Chrome浏览器并在Chrome中打开了该记录,因为Chrome忽略了会话,所以打破了我们的会话ID。

另一个原因是用户未关闭浏览器或未注销允许相同用户或完全不同用户选择和使用会话ID的应用程序。

在引入浏览器检查并拒绝Chrome之后,教育用户确保他们注销,在繁忙时段外进行任何更新,问题就此消失。

我忘了提及,也在你的IIS上最好关闭输出缓存中的缓存,用于用户和内核集以防止缓存。