只是想通过大家来管理这一点,看看是否有任何好主意,因为我在整整一天,一夜又一天的搜索后已经用尽了所有的想法。在并发使用(硒测试)时,我们遇到的问题总是以数据库连接为中心,例如:超时,删除/关闭连接,数据库服务器无法访问。
这个问题似乎仅限于Azure,因为即使在指向同一数据库(SQL Azure)的相同代码上运行相同的selenium测试,我们还没有在本地遇到此问题,因此它会指向它SQL Azure中的出站数据库连接问题。到目前为止,我们尝试了以下内容:
改变了设计模式 - 我们甚至完成了实施的长度 工作单元设计模式,数据库连接所在的位置 在每个工作单位之后被解雇和处理但是这个 使用延迟加载在其他地方引发问题,将对象传入 方法,这将是一个太大的返工 点。
改变角色大小 - 我能想到的最后一件事就是提升角色 Windows中任何隐式连接限制时的角色大小 Azure - 目前正在部署,所以仍有一半的机会 可能有用!
网站基础设施如下:
非常感谢任何帮助。
更新:我们将虚拟机大小提升至中等水平,所有这一切都意味着同一问题花费的时间更长。
当问题开始发生时,团队成员注意到发生了以下异常:
InvalidOperationException:执行命令需要打开且可用的连接。连接的当前状态已被破坏。
每当数据库被命中时都会发生这种情况(不是特定于某个代码区域)。
答案 0 :(得分:5)
我之前遇到过这种问题。在我的情况下,它与实体框架ObjectContexts没有被正确处理,在最终太多的上下文被旋转并且网站被推翻之前。我们使用Entity Framework Profiler确定在抛出错误时有很多未闭合的ObjectContexts。
我们不可能转移到工作单元设计模式(或类似),因为它需要重写业务层,因此,我们通过在每个页面请求后手动关闭ObjectContexts来解决它。我们采用了在Global.asax的End Request事件中手动配置上下文的方法,但是,其他有效的方法是将上下文存储在HttpContext中,或者使用“每个请求”实现IoC容器(例如Castle Windsor) “生活方式。