【发布时间】: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