Azure SQL Server - 偶尔连接丢失

时间:2016-01-26 21:47:21

标签: sql-server asp.net-mvc azure

我拥有自己的Azure WebApp,并且拥有自己的Azure SQL Server实例。我注意到当我在本地计算机上进行WebApp开发时,有时与SQL Server实例的连接失败。我收到此错误'指定的网络名称不再可用'。如果我继续执行Exception(或重新运行WebApp)然后刷新网页,它将在下次连接时正常。再次尝试之间也没有分钟。它可能需要几秒钟才能再次运行。

我不知道为什么会这样。有时它会工作一个小时,然后就会停止工作。我已经在网上完成了研究,我发现的唯一的东西就是采取某种重试政策'到位。我不确定我是否需要这个,因为我还没有看到这种情况发生在生产环境中(敲木头)。

这可能是某种DNS问题吗?有人建议如何通过这个?我可以通过它,但它非常烦人。

1 个答案:

答案 0 :(得分:4)

对此的答案将非常广泛,但欢迎云计算世界,其中瞬态故障必然会发生。你对自己需要做的事情是正确的,但你为什么不应该做错了。仅仅因为你没有在生产中看到它们并不意味着它们没有发生和/或将要发生。基本上,如果这个应用程序需要有任何稳定性要求,或者超过少数人或使用它的人,那么你真的应该'防御性代码'并预先把它烘烤。

什么是瞬态故障?

基本上,它们是由于数据包丢失,超时(由于先前运行的查询或限制等)而不时发生的故障,等等。来自以下链接文章的引用:

  

这些主要是网络问题。如果您在Azure中执行操作   有时它不起作用,但如果你尝试一段时间后,它   效果很好。这种奇怪的和不可预测的行为只不过是   瞬态故障。当我们谈论SQL Azure时,瞬态故障就是   共同。文章Azure SQL数据库资源管理 -   http://msdn.microsoft.com/library/azure/dn338083.aspx提到了   您可能面临SQL Azure短暂故障的情况。一世   强烈建议您仔细阅读所有这些文件和相关内容   链接。非常翔实!!现在,SQL的常见瞬态错误   Azure很受限制。

为什么我现在必须在云中担心它们?

因为大多数开发人员习惯于在同一台计算机上或至少在同一网络上使用SQL服务器进行开发。由于距离的原因,响应时间和丢包机会很小。 Azure数据中心与您不在同一建筑物中,因此瞬态错误的可能性会增加。

如何解决?

有很多方法,但我真的建议您阅读一些有关Transient Fault Handling Block实现的文章以及如何使用SQL Azure实现。 Here is one讨论如何使用Entity Framework启用。此框架允许您指定重试的次数,重试次数以及使用何种方法来确定重试的频率(线性为10ms,指数退回为10ms,然后是100ms,然后是1000ms)。

我希望我能给你一个代码示例,但你的问题不仅仅是一个简单的一行代码修复。此外,无论何时使用任何基于云的提供程序(Sql Azure,Blob存储,服务总线),您都应该了解并实现瞬态故障处理块。