Скажем, у меня есть служба Windows, которая запускает метод для создания отчетов.
Например, скажем, у меня есть таблица отчетов, в которой есть путь к отчету, статус, имя отчета, параметры и т. Д.
Когда пользователь нажимает кнопку «Создать отчет», в таблицу добавляется новая запись со статусом в очереди.Служба будет принимать отчеты в очереди, генерировать отчет, обновлять статус и устанавливать путь к завершенному отчету.
Два способа, которые я могу придумать, - это либо опросить таблицу на наличие отчетов в очереди (что-то вроде):
TimerCallback callback = new TimerCallback(RunQuery);
this.QueryTimer = new Timer(callback, null, 1000, 10000);
public void RunQuery(object obj)
{
//find reports with status of queued,
//loop through them and generate reports
}
Или создать файл с ReportId и использовать FileSystemWatcher дляопределить, какие отчеты нужно запускать (что-то вроде):
private void FileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
{
ReportStack.Push(e.FullPath);
Thread TR = new Thread(RunQuery);
TR.Start();
}
public void RunQuery()
{
string filePath = Convert.ToString(ReportStack.Pop());
GenerateReport(filePath);
...
}
Недостатком 1-го метода является то, что мне нужно указать время опроса, и отчеты не генерируются мгновенно, поскольку они находятся в очереди.Недостатком второго метода является небольшая сложность создания и удаления файлов, настройка разрешения для приложения на запись в общую папку и т. Д.
Существует ли способ заставить службу автоматически запускать отчеты по мереони помещаются в таблицу отчета (что-то вроде DatabaseTableWatcher!) или другой лучший способ сделать это?