Ale*_*exC 10 asp.net-mvc entity-framework azure azure-sql-database
我正在运行一个带有使用Entity Framework 6访问的SQL Azure数据库的.Net MVC Azure网站.间歇性地(大约一千个请求中有一个),我收到错误"System.ComponentModel.Win32Exception:信号量超时期限已过期"
System.Data.SqlClient.SqlException:从服务器接收结果时发生传输级错误.(提供程序:TCP提供程序,错误:0 - 信号量超时期限已过期.)---> System.ComponentModel.Win32Exception:信号量超时期限已过期
似乎没有理由在错误之前和之后以及它们与SQL Azure的交互都很好.有没有办法处理或解决这个问题.
Ada*_*ley 15
Azure SQL与内部SQL非常不同.当Azure SQL Server过载或关闭时,它将断开许多连接,当您重新连接时,您将被发送到另一个SQL Server.
但是,对于TCP连接,您不知道另一端是否已终止连接,除非您实际向下发送信息,这就是发生此错误的原因.
一旦你的代码知道连接被终止,它就会在下一个查询上建立一个新的连接,这将很好地工作.
使用Entity Framework 6,您现在可以使用Entity Framework处理SQL Azure的瞬态故障处理
在DBConfiguration类中,您需要设置SetExecutionStrategy并对其进行配置.只需在项目中创建一个新类,并从DbConfiguration继承.
public class MyConfiguration : DbConfiguration
{
public MyConfiguration()
{
SetExecutionStrategy(
"System.Data.SqlClient",
() => new SqlAzureExecutionStrategy(1, TimeSpan.FromSeconds(30)));
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个已知问题,在 VIP 交换期间会发生这种情况,EF6 重试策略在这种情况下没有帮助。
| 归档时间: |
|
| 查看次数: |
12263 次 |
| 最近记录: |