我有一个ASP.NET MVC应用程序。当通过 CustomerController 创建新客户时,我会运行一个新的后台任务(使用HostingEnvironment.QueueBackgroundWorkItem)来为该客户创建新的Azure SqlDatabase。
我使用Entity Framework Code First来创建/初始化新数据库。代码如下:
// My ConnectionString
var con = "...";
// Initialization strategy: create db and execute all Migrations
// MyConfiguration is just a DbMigrationsConfiguration with AutomaticMigrationsEnabled = true
Database.SetInitializer(strategy: new MigrateDatabaseToLatestVersion<CustomerDataContext, MyConfiguration>(useSuppliedContext: true));
using (var context = new CustomerDataContext(con))
{
// Neither 'Connection Timeout=300' in ConnectionString nor this line helps -> TimeoutException will rise after 30-40s
context.Database.CommandTimeout = 300;
// create the db - this lines throws the exception after ~40s
context.Database.Initialize(true);
}
我的问题是,大约40秒后我总是会遇到 TimeoutException 。我认为这是因为Azure无法在这么短的时间内初始化新数据库。别误会:Azure会成功创建数据库,但我想等到那一点/摆脱 TimeoutException 。 编辑1: 我在我的ConnectionString中使用 Connection Timeout = 300 ,但我的应用程序并不真正关心它;大约40秒后,我总是遇到一个SqlError。 编辑2: 引发异常是一个 SqlException 。消息:超时已过期。 操作完成之前的超时时间或服务器未响应。 来源:.Net SqlClient数据提供程序 编辑3: 现在我可以确定这与ASP.NET / IIS无关。即使在简单的UnitTest方法中,上面的代码也失败了。