Лучший подход к очередям отчетов - PullRequest
1 голос
/ 20 декабря 2011

Скажем, у меня есть служба 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!) или другой лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 20 декабря 2011

Триггеры SQL или очередь сообщений

http://msdn.microsoft.com/en-us/library/ms189799.aspx

Поэтому, когда запись вставляется в таблицу, вы можете запустить действие, такое как вызов sproc.

Лично мне нравится твой первый подход к опросу.

1 голос
/ 20 декабря 2011

Как насчет использования Microsoft Message Queuing (MSMQ) ? MSMQ создает и управляет очередями сообщений на уровне операционной системы. Кажется, идеально подходит для вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...