【问题标题】:Restoring DB requires us to recycle IIS application pool恢复DB需要我们回收IIS应用池
【发布时间】:2015-02-26 12:50:07
【问题描述】:

我们的网络测试(基本上是 NUnit 测试)有一个奇怪的情况:

  • SetUp 方法中,每个测试都会恢复数据库
  • 有时所有后续测试都会失败,并显示以下SqlException

    SqlException (0x80131904):无法打开登录请求的数据库“OurDatabaseName”。登录失败。用户“NT AUTHORITY\NETWORK SERVICE”登录失败。

  • 但访问权限是正确的,因此该错误具有误导性。

  • 一旦我们为应用程序回收 IIS 应用程序池,一切都会恢复正常

这个问题大约发生。在五次处决之一。如果我们删除数据库恢复调用 -> 完全没有问题。恢复我们的数据库时似乎存在某种竞争条件,它不会以某种方式关闭旧连接?!

在恢复数据库后我们是否必须执行特殊代码以强制终止与数据库的所有连接或类似的东西?

我们已经在恢复数据库后调用了SqlConnection.ClearAllPools();(但是,来自网络测试项目......所以不知道这是否对网络应用程序有任何影响)。

【问题讨论】:

  • 如果重试会发生什么?尝试在失败时处理、重新创建和重新打开连接。
  • 网页测试中通过浏览器刷新重试? => 在我们回收应用程序池之前,结果相同。在服务器上重试 => 如何决定何时重试?这个 SqlException 非常通用/具有误导性,在某些情况下甚至可能是有效的......

标签: asp.net sql-server iis sql-server-2012 nunit


【解决方案1】:

好像有什么东西阻塞了连接。确保您已关闭远程连接或防病毒可能是失败的原因。检查您的防病毒日志或隔离列表是否 sql server 的服务在列表中(如果存在),然后尝试将其移至排除列表。

【讨论】:

  • 但是是什么阻止了连接?为什么只在某些情况下?我们的内部测试服务器上没有防病毒工具。此外,您的所有建议都会暗示它要么一直有效,要么永远不会。
猜你喜欢
  • 2011-09-20
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 2020-02-14
  • 2012-08-11
  • 2010-10-10
  • 2019-08-19
  • 1970-01-01
相关资源
最近更新 更多