2017-11-11 127 views
0

这里有一个奇怪的错误。在我们的ASP.NET 4.6应用中,使用实体框架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命令尝试...... catch块......我们这样做!它只是通过和崩溃的应用程序!

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

当页面刷新几秒后,一切正常。没有错误,没有问题。

的代码引发错误的线路之一的实例:

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

这真的很简单。这个只是碰巧遇到了很多,因为这个代码块被频繁调用。实际的SQL请求是不相关的,因为不管使用哪条线,EF内的连接都会失败。

回答

2

服务器登录将断开连接,同时向上/向下扩展到新层,并且事务回滚。但是,包含的数据库登录在扩展过程中保持连接状态,因此建议通过服务器登录进行登录。

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

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

+0

这或多或少是答案。在我们的例子中,在模型的构造函数中放置一个try.catch允许我们设置一些重试逻辑。我们正在调查数据库登录,谢谢。 –

相关问题