我们一直在努力解决一个奇怪的例外,但尚未找到解决方案。
在似乎是随机的时间,我们的应用程序将抛出异常,最后两个内部异常的消息始终是"底层提供程序在Open"用户' userName '。
的登录失败我之前看到过最后一个异常(报告登录失败的异常),但从未遇到过另一个异常。因此,我不确定我理解发生了什么。
遇到此异常后,似乎很快就会修复。这样,我的意思是,如果您在首次抛出异常后不久尝试访问应用程序中的任何内容,您将继续获得相同或类似的异常。但是,如果等待几分钟,应用程序中的所有内容都会按预期工作。
我认为值得一提的其他一些事情:
任何帮助都将受到高度赞赏,因为我们已经非常渴望解决这个问题。
答案 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