我开始实现一个简单的守护进程,它在后台工作程序组件的帮助下从ftp位置获取文件,以保证线程的安全性。虽然我有点感觉我朝着正确的方向前进,但我对所涉及的技术并不完全熟悉,因此在整个应用程序生命周期中不是很轻松,我说有些场景我肯定还不知道如何处理,也就是说,如何处理停止事件,如果服务停止,会发生什么?当工人在运行时,等等。我想下面这段代码几乎不代表我要实现的目标:
#region Daemon Events
protected override void OnStart(string[] args)
{
this.transferBackgroundWorker.RunWorkerAsync();
}
protected override void OnStop()
{
this.transferBackgroundWorker.CancelAsync(); // Thanks Wolfwyrd!
}
#endregion
#region BackgroundWorker Events
private void transferBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
worker.WorkerSupportsCancellation = true;
#region FTP Download
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(Daemon.FTP_HOST);
ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
ftpRequest.Credentials = new NetworkCredential(Daemon.FTP_USER, Daemon.FTP_PASS);
FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
using(Stream ftpResponseStream = ftpResponse.GetResponseStream())
{
using (StreamWriter sw = File.CreateText(FILE_NAME))
{
sw.WriteLine(ftpResponseStream);
sw.Close();
}
ftpResponse.Close();
}
#endregion
e.Result = "DEBUG: Download complete" + ftpResponse.StatusDescription;
}
private void transferBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
EventLog.WriteEntry("Exception caught: " + e.Error.Message);
}
else
{
EventLog.WriteEntry(e.Result.ToString());
}
}
#endregion
任何建议都会受到赞赏。非常感谢您的帮助。
编辑
:刚刚重新实现了FTP文件提取。