首页 > 解决方案 > 基于 C# Windows 的应用程序的 Polly 框架问题

问题描述

我有一个基于 C# 的基于 Windows 的应用程序并使用 Visual Studio 2017

我正在尝试在应用程序运行时从连接断开的位置执行到 Oracle 数据库和 FTP 的连接。

我使用以下代码在应用程序中的某个位置检查 FTP 和 Oracle 连接

var retryTimes = 100;
var retryableErrorCodes = new[] { "ORA-03113", "ORA-03114", "ORA-12543", "ORA-12170", "ORA-12154" };

RetryPolicy retryPolicyFTP = Policy
    .Handle<Xceed.Ftp.FtpInvalidStateException>().Or<Xceed.Ftp.FtpIOException>()
    .WaitAndRetry(retryTimes, _ => TimeSpan.FromSeconds(5));

RetryPolicy retryPolicy = Policy
    .Handle<OracleException>(ex => retryableErrorCodes.Any(errorCode => ex.Message.Contains(errorCode)))
    .WaitAndRetry(retryTimes, _ => TimeSpan.FromSeconds(5));

Policy.Wrap(retryPolicyFTP, retryPolicy).Execute(() =>
{
     ExecuteSomeFunction();
});

当我每次尝试断开VPN时,我的意思是此时与Oracle和FTP的连接将丢失并重新连接并破坏应用程序,执行点将仅在

Application.Run(MainForm.Instance);

为什么它没有从它被丢弃的点重新执行。

编辑

我尝试使用 Windows 应用程序进行 POC,在断开 Oracle 连接后,我收到以下错误。

适用于 Oracle 连接的 Windows 应用 POC

请对此有所了解

标签: c#oracleftppolly

解决方案


推荐阅读