如何解决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
-
连接字符串有 MultipleActiveResultSets == true
-
让 EF 管理连接池。
-
没有创建显式交易。 IE。 SaveChanges 创建并提交事务。
-
应用程序类型通常人们只编辑他们自己的数据。
-
许多用户尝试编辑相同数据的业务场景很少。
-
时间戳类型字段用于检测获取的记录是否已更改
目标场景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 举报,一经查实,本站将立刻删除。