未处理的异常错误 - 用户

时间:2017-11-11 18:47:15

标签: sql vb.net entity-framework azure azure-sql-database

我们这里有一个奇怪的错误。在我们的ASP.NET 4.6应用程序中,使用Entity Framework 6.2,我们在访问SQL Azure数据库时收到“用户登录失败”。我很确定错误的原因是在Azure中切换层。我没有得到的是为什么没有发现错误。我们的每个SQL操作都在try ... catch块中。错误从块中掉出来并在应用程序崩溃之前被Globals.asax捕获。 我们有

SetExecutionStrategy("System.Data.SqlClient", Function() New SqlServer.SqlAzureExecutionStrategy(10, TimeSpan.FromSeconds(7)))

根据我的理解,它将从第一个错误开始重试任何SQL执行10次至少70秒。根据微软的技术支持,这没有参与,因为它尚未与SQL Azure建立连接。连接字符串中的ConnectRetryCount和间隔不适用,因为它正在与服务器通信。服务器只是说,“我知道你在那里,但我不会让你进去!” 根据MS Tech的支持,解决这个问题的唯一方法是在我们所有的SQL命令周围进行try ... catch块...我们这样做!它刚刚崩溃并崩溃了应用程序!

我无法在globals.asax中重试,因为此时它已经崩溃了。 根据MS,没有办法在上下文中捕获错误并从那里重试。那么,解决方案是什么?除了“只是让应用程序崩溃并让它们刷新页面!”之外,必须有一些答案。

几秒钟后刷新页面,一切都很好。没有错误,没有问题。

抛出错误的一行代码示例:

MapTo = ctx.BrowserMaps.FirstOrDefault(Function(x) code.Contains(x.NameOrUserAgent))

这真的很直接。这个恰好出现了很多,因为这个代码块经常被调用。实际的SQL请求是无关紧要的,因为无论使用什么行,EF中的连接都会失败。

1 个答案:

答案 0 :(得分:2)

在向上/向下扩展到新层时将断开服务器登录,并回滚事务。但是,包含的数据库登录在扩展过程中保持连接,因此建议使用它们而不是服务器登录。

尝试捕获可能无法解决问题,因为您可能正在捕获错误#零,并且Azure SQL数据库中的许多错误属于该错误0类别。

只是一个评论,缩放后的性能可能在缩放后很差,并在几分钟后改善。查询计划也可能会发生变化。