using bsmd.database; using log4net; using System; using System.Diagnostics; using System.IO; using System.ServiceProcess; using System.Timers; namespace bsmd.dakosy.ResponseService { /// /// Windows service zum Abruf von NSW Response Dateien via SFTP und Import der Dateien in die DB /// public partial class SFTPService : ServiceBase { private Timer _timer; private object _timerlock = new object(); private bool processRunning = false; private ILog _log = LogManager.GetLogger(typeof(SFTPService)); public SFTPService() { Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); InitializeComponent(); } protected override void OnStart(string[] args) { this.EventLog.Source = this.ServiceName; this.EventLog.Log = "Application"; this.Init(args); this.EventLog.WriteEntry("NSW SFTP Response Service started.", EventLogEntryType.Information); System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location); string version = fvi.FileVersion; _log.InfoFormat("Dakosy SFTP Response Service started. v.{0}", version); this._timer_Elapsed(null, null); } protected override void OnStop() { _log.Info("SFTPService stopped"); } public void Init(string[] args) { this._timer = new Timer(); this._timer.Interval = Properties.Settings.Default.SleepSeconds * 1000; this._timer.Elapsed += _timer_Elapsed; this._timer.Enabled = true; if (Debugger.IsAttached) this._timer_Elapsed(null, null); } void _timer_Elapsed(object sender, ElapsedEventArgs e) { lock (this._timerlock) { if (this.processRunning) return; else this.processRunning = true; } if (DBManager.Instance.Connect(Properties.Settings.Default.ConnectionString)) { try { Response.ReadAll(); } catch (Exception ex) { _log.ErrorFormat("Exception occurred: {0}", ex.ToString()); } } else { this.EventLog.WriteEntry("FormService DB connection failure", EventLogEntryType.Error); } lock (this._timerlock) { this.processRunning = false; } } } }