只是想由大家运行一下,看看是否有任何好的想法,因为经过一整天、一夜和一早的搜索,我已经用尽了所有的想法。在并发使用(selenium 测试)时,我们遇到的问题总是围绕数据库连接,例如超时、断开/关闭的连接、无法访问数据库服务器。
这个问题似乎仅限于 Azure,因为即使在指向同一个数据库(SQL Azure)的相同代码上运行相同的硒测试时,我们还没有在本地遇到这个问题,所以它会指出它是出站的一些问题SQL Azure 中的数据库连接。到目前为止,我们已经尝试了以下方法:
- Azure 瞬态故障处理——当 SQL Azure 服务本身出现临时问题时,我们有重试逻辑。
- 更改通信协议——我们已经尝试过 TCP 和命名管道,但我们都遇到了同样的问题。
- 调整数据库连接超时间隔——我们尝试增加此时间无济于事。
- 添加多个活动结果集 – 我们已将其添加到连接字符串中,但无济于事。
- 检查每个查询的连接状态——当我们返回 DataContext 时,我们检查它的连接并在必要时重新打开。
- 关闭连接池 - 我们也尝试过,但没有成功。
改变了设计模式——我们甚至不遗余力地实现了工作单元设计模式,在每个工作单元之后都会启动和处理数据库连接,但这会在其他地方引起延迟加载、将对象传递给方法等问题在这一点上,这将是一个太大的返工。
更改角色大小——我想尝试的最后一件事是在 Windows Azure 中存在任何隐式连接限制的情况下增加角色大小——目前正在部署,所以它仍有一半可能起作用!
网站基础设施如下:
- DataContext 类(扩展 DbContext),它是 Code First EF 上下文。
- BusinessLayer 类包含一个私有的、非静态的 DataContext。DataContext 是注入每个 Manager/Helper 类的构造函数。
- BusinessLayerService 类包含一个公共的、线程静态的 BusinessLayer 实例。
- MVC 站点使用 BusinessLayerService.Instance 访问管理器类,这些管理器类查询和更新它们已传递的 DataContext。
任何帮助将不胜感激。
更新:我们将 VM 大小提高到中,它所做的只是意味着同样的问题需要更长的时间才能发生。
当问题开始发生时,一名团队成员注意到发生了以下异常:
InvalidOperationException:执行命令需要打开且可用的连接。连接的当前状态已断开。
每当数据库被击中时,这种情况就开始发生(不是特定于某个代码区域)。