【问题标题】:Sql Azure Connection FailedSql Azure 连接失败
【发布时间】:2016-11-04 17:52:52
【问题描述】:

Azure 中托管的应用程序在尝试打开与 Sql 数据库的连接时引发此异常:

引发了一个异常,可能是由于暂时性故障。 如果要连接到 Sql Azure 数据库,请考虑使用 SqlAzure 策略。

我尝试关闭防火墙,但没有成功。

我可以通过 sql management studio 连接到 sql 数据库,但是 web 应用程序不能。

它使用 EF6 连接数据库。 这是引发错误的代码的和平:

var usuario = Db.Usuario.Where(x => x.Login == login).FirstOrDefault();
if (usuario != null && usuario.ProfissionalID.HasValue)
{
  usuario.Profissional = Db.Profissional.Where(x => x.ProfissionalID == usuario.ProfissionalID).FirstOrDefault();
}
return usuario;

我在 Microsoft 文章中看到,第一次连接尝试失败时使用 SqlAzureStrategy 尝试重新连接的建议:

public class DbContextConfiguration : DbConfiguration
{
  public DbContextConfiguration()
  {
    SetExecutionStrategy("System.Data.SqlClient",
      () => new SqlAzureExecutionStrategy(1, TimeSpan.FromSeconds(30)));
  }
}

但这似乎不是我的问题的解决方案,因为当我实现这个时,我收到了这个错误消息:

执行数据库时超出最大重试次数 (1) 使用“SqlAzureExecutionStrategy”进行操作。

【问题讨论】:

  • 我的连接字符串:
  • 您尝试关闭防火墙是什么意思?你的意思是你将你的IP地址添加到例外中?当您收到错误时,此应用是否在 Azure 中运行?

标签: sql-server azure


【解决方案1】:

我不认为这是数据库问题,否则您会看到一个非常不同的错误,实际上表明 IP 地址不允许通过防火墙。

相反,我会尝试查看来自 Markus Wagner 的帖子,他在其中谈到了 ma​​xRetryCountma​​xDelay 参数。对我来说,这是一个很好的起点,可以确保您的代码针对使用这些类进行了适当的设计。

其次,一些最佳实践是published 围绕使用 Azure SQL 服务。我希望确保您满足所有这些最佳实践,并在可能的情况下进行调整。我会看:

  • 最大限度地减少网络延迟
  • 通过引入应用级缓存来减少网络使用量
  • 管理网络连接,使其尽可能短地保持打开状态
  • 调整您的 SQL
  • 实现重试逻辑

【讨论】:

  • 感谢您的帮助@Martyn。根据您的建议,我可以通过删除在同一操作中执行的两个数据库查询之一来使其工作。我不确定,但在第二个查询中出现了这个错误。两个查询很快,但在数据库中建立了两个连接。这是这个错误的原因吗?
  • 根据您处理连接的方式,可能是@OtavioCamargo,如果不看更多代码就很难说。
猜你喜欢
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 2014-10-24
  • 2012-05-25
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多