这里有一个奇怪的错误。在我们的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内的连接都会失败。
这或多或少是答案。在我们的例子中,在模型的构造函数中放置一个try.catch允许我们设置一些重试逻辑。我们正在调查数据库登录,谢谢。 –