ASP.NET核心SQL连接TImeout

时间:2016-09-12 17:47:36

标签: asp.net-core asp.net-core-mvc entity-framework-core asp.net-core-1.0

我一直致力于将ASP.NET 5 RC1应用程序升级到ASP.NET Core 1.我已成功升级它,方法是将软件包(AspNet更换为AspNetCore)并从EF7更改为EF Core(Microsoft.Data) .Entity to Microsoft.EntityFrameworkCore)。

我遇到的问题是连接超时已过期的间歇性SqlException。

以下是完整的例外情况:

System.Data.SqlClient.SqlException occurred.  
Class=11 ErrorCode=-2146232060 HResult=-2146232060 LineNumber=0  
**Message=Connection Timeout Expired.  The timeout period elapsed while attempting to consume the pre-login handshake acknowledgement.  This could be because the pre-login handshake failed or the server was unable to respond back in time.  The duration spent while attempting to connect to this server was - [Pre-Login] initialization=924; handshake=6;**   
  Number=-2   
  Procedure=""  
  Server=(localdb)\mssqllocaldb  
  Source=.Net SqlClient Data Provider  
  State=0  
  StackTrace:  
       at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)  

我试过像这样增加命令超时:

public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
    this.Database.SetCommandTimeout(120);
}

此行引发异常,但当我发表评论时,它会在其他地方发生,这使我相信它是在第一次访问数据库时发生的。

app.ApplicationServices.GetService<ApplicationDbContext>().Database.Migrate();

1 个答案:

答案 0 :(得分:4)

您的问题与使用服务器建立连接所需的时间有关。更改CommandTimeout值(允许命令执行的时间量)将不会对此产生任何影响。您需要考虑增加连接超时值,这是通过连接字符串实现的:

Server=(localdb)\mssqllocaldb;Database=yourDb;Trusted_connection=true;connect timeout=100;