我有一个asp.net网站,它连接到一个每5分钟恢复一次的数据库,因为它是生产数据库的快照。当我登录到站点并且数据库正在恢复时,它返回与数据库相关的错误。它不会每次都返回相同的错误。
我想要的是,每次数据库恢复并且用户登录时,它将在前端返回自定义错误页面,而在后端,如果连接由于恢复而丢失,它将自动连接一次数据库在恢复中完成。任何的想法 ?感谢。
答案 0 :(得分:0)
我建议尝试在数据库端找到更好的设计,以避免出现片状行为。如果这是我们的控制,请尝试使用优秀的Polly库来管理重试。它可以在Nuget上获得,并在Polly Page位于GIT。这将为您提供强大的重试策略,而无需尝试使用循环等编写一个。
// Retries for 30 seconds, 5 times.
Policy.Handle<Exception>() // Replace <Exception> with the DB exception you receive
.WaitAndRetry(5, retryAttempt => TimeSpan.FromSeconds(30))
.ExecuteAndCapture(() =>
{
<Your code goes here>
});
答案 1 :(得分:0)
您可以使用EF Connection Resiliency
功能。连接弹性是指EF能够自动重试由于这些连接中断而失败的任何命令的能力。
通过IDbExecutionStrategy
接口的实现来处理连接重试。 IDbExecutionStrategy
的实现将负责接受操作,如果发生异常,则确定重试是否合适,如果是,则重试。
这里有一些有用的样本: