EF + SQL Server MVC 应用程序在不同的应用程序池中有两个版本

问题描述

与在一个 appPool 中运行一个应用相比,我在两个应用池中运行两个应用时遇到了不同的行为。

目前有一个 AppPool 运行 webapp 版本 V1。我们现在正在转向同时运行两个网络应用版本的设置,因为我们无法同时将所有用户移动到版本 V2。

我发现在场景 V1 中避免了乐观并发异常,但在场景 V1&V2 中频繁发生。为什么会发生这种情况,是否还有其他类似的问题需要注意?

场景 V1(当前)

  • IIS、Windows Server 2012 R2

  • Webapp V1 是 MVC 5.6.3 / 4.7.2

  • DefaultAppPool 集成了 .NET 4.0

  • Webapp V1 是使用 DeployIISAppPath DefaultWebSite/prod 部署的

  • 目前只有一个 DefaultAppPool for Webapp V1

  • 有使用 Windows 身份验证的 DefaultAppPool 的 sql Server 登录

  • EF 6.1.3 用于访问数据库数据库优先

  • 数据库运行在同一个虚拟机上

  • 连接字符串有 MultipleActiveResultSets == true

  • 让 EF 管理连接池。

  • 没有创建显式交易。 IE。 SaveChanges 创建并提交事务。

  • 应用程序类型通常人们只编辑他们自己的数据。

  • 许多用户尝试编辑相同数据的业务场景很少。

  • 时间戳类型字段用于检测获取的记录是否已更改

  • 用户登录后不会在 V1 和 V2 之间切换

目标场景V1&V2相同但

  • 新的 Webapp 版本 V2 部署为使用应用路径 DefaultWebSite/prod2 并行运行
  • Webapp V2 也是 MVC 5.6.3 / 4.7.2
  • 路径 prod 2 中的 Webapp V2 将使用另一个应用程序池,它也是 .NET 4.0 集成
  • sql Server 将被授予另一个应用程序池的登录权限
  • V1 和 V2 的登录屏幕将类似。一些使用 apppath ../prod 访问站点用户登录后被重定向到 ../prod2。身份验证基于 cookie。

到目前为止我已经完成了以下步骤

  • 在测试服务器中对类似设置进行多次测试,几个人同时编辑数据
  • 一些自动化测试试图重复更新相同的数据,更新没有 TimeStamp 字段的测试记录。
  • 发现V1场景部分并发更新是排队依次完成,而V1&V2场景OptimisticConcurrencyException频繁发生
  • 这是因为MARS吗?
  • 还有哪些其他行为差异可以预期我的 只是测试没有发现?

我最关心的是数据访问问题。我意识到除了数据访问之外可能还有其他一些问题:

  • 我没有明确使用任何静态数据来分享任何东西
  • 但我是否可能依赖于隐含静态的东西而我没有意识到这一点?
  • TempData 用于Proc 模式

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)