奇怪的数据库异常

时间:2017-11-30 21:48:25

标签: entity-framework azure-sql-database

我们一直在努力解决一个奇怪的例外,但尚未找到解决方案。

在似乎是随机的时间,我们的应用程序将抛出异​​常,最后两个内部异常的消息始终是"底层提供程序在Open"用户' userName '。

的登录失败

我之前看到过最后一个异常(报告登录失败的异常),但从未遇到过另一个异常。因此,我不确定我理解发生了什么。

遇到此异常后,似乎很快就会修复。这样,我的意思是,如果您在首次抛出异常后不久尝试访问应用程序中的任何内容,您将继续获得相同或类似的异常。但是,如果等待几分钟,应用程序中的所有内容都会按预期工作。

我认为值得一提的其他一些事情:

  1. 使用SQL Azure数据库时似乎会发生这种情况。我们有 联系微软,看看他们是否可以帮助我们确定是什么 发生。他们已经能够告诉我们密码无效 正在发送但无法告诉我们它是什么(空白或其他)。\
  2. 好像参考了实体框架 整个堆栈跟踪这些异常的每个实例。
  3. 我们已启用Application Insights,因此似乎有很多 可用的信息...我们不太确定如何破译所有 它现在。
  4. 我们确信登录信息是正确的,因为我们已经验证连接字符串是正确的,并且应用程序功能(访问数据库)除接收这些例外情况外都有效。
  5. 任何帮助都将受到高度赞赏,因为我们已经非常渴望解决这个问题。

1 个答案:

答案 0 :(得分:0)

您是否可以尝试使用以下代码初始化DBContext?

using (DatabaseEntities context = new DatabaseEntities())
{
    context.Connection.Open();
    // the rest
}

更多建议。确保连接字符串的超时时间为30,如下所示。

<connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=myserver.windows.net,1433;Database=mydb;User ID=username;Password=password;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
</connectionStrings>

应该在您的应用程序中添加重试逻辑,以便能够按照here所述的方式遇到暂时性错误,因为您说几分钟后问题就会消失。重试逻辑的一个例子是:

public void HandleTransients()
{
    var connStr = "some database";
    var _policy = RetryPolicy.Create < SqlAzureTransientErrorDetectionStrategy(
        retryCount: 3,
        retryInterval: TimeSpan.FromSeconds(5));

    using (var conn = new ReliableSqlConnection(connStr, _policy))
    {
        // Do SQL stuff here.
    }
}

f