【发布时间】:2020-06-22 20:01:25
【问题描述】:
我创建了使用 SSH.net 每 600 秒从 sFTP 服务器读取文件的窗口服务 在 OnStart 我创建计时器
timer = new Timer(TimerCallback, null, 0, timeDelay);
TimerCallBack 是使用 SSH.net 的函数。在读取文件之前的连接中,我有代码连接到 sFTP 服务器,如下所示
var FILE_READ_FLAG = false;
try
{
req = new SftpClient(ftpHost, ftpLogin, ftpLoginPassword);
req.Connect();
if (req.IsConnected)
{
directories = req.ListDirectory(ftpPath);
FILE_READ_FLAG = true;
}
}
catch (Exception e)
{
EventLog.WriteEntry(sSource,"ERROR : " + GetFullMessageFromException(e),
EventLogEntryType.Information, 234);
FILE_READ_FLAG = false;
}
if (FILE_READ_FLAG){
// read file and insert to database
}
问题是当服务运行并发生异常时,服务可以每 600 秒再次运行一次,但出现错误
Session operation has timed out
at Renci.SshNet.Session.WaitOnHandle(WaitHandle waitHandle, TimeSpan timeout)
at Renci.SshNet.Session.WaitOnHandle(WaitHandle waitHandle)
at Renci.SshNet.Session.Connect()
at Renci.SshNet.BaseClient.Connect()
当我尝试停止和重新启动服务时,服务无法再次运行并且似乎卡住了,Windows 显示警报消息无法及时停止,我必须通过 cmd 终止服务并手动启动它
我的问题是为什么另一个异常可以用 try/catch 块处理,但是由于这个错误,服务不能用计时器再次运行,我错过了什么或使用错误?谢谢
【问题讨论】: