Как спроектировать запрос отчета с клиентских машин для запуска на доступном сервере

У меня есть проект winforms vb.net 2.0, который полон всевозможных бизнес-отчетов (сгенерированных с помощью вызовов взаимодействия с Excel), которые можно запускать «по требованию». Некоторые из этих отчетов фильтруют большое количество данных и занимают много времени, особенно на наших старых компьютерах в офисе.

Я хотел бы иметь систему, в которой запрос отчета может быть сделан с клиентских машин, какой-то слушатель видит его, находит сервер с низкой нагрузкой, запускает отчет на этом сервере и отправляет результат пользователю, который его запросил. .

Как я могу спроектировать такое изменение? Все наши отчеты принимают разные параметры, и я не могу понять, как с этим бороться. Должен ли каждый генератор наследоваться от класса RemoteReport, который делает это? Нужно ли мне использовать службу на одном из наших серверов для прослушивания этих запросов?


person Jeffrey    schedule 29.09.2009    source источник


Ответы (2)


Один из возможных подходов — создать базу данных, к которой могут подключаться клиенты, и попросить клиента добавить запись, представляющую запрос отчета, включая необходимые параметры, которые можно передать в поле xml.

Затем у вас может быть служба, которая периодически проверяет эту базу данных на наличие новых запросов и, в зависимости от того, сколько других запросов обрабатывается в данный момент, отправляет запрос на наименее загруженный сервер.

После этого сервер сможет запустить отчет и отправить файл пользователю по электронной почте.

Это ни в коем случае не быстрое решение, и, вероятно, потребуется некоторое время, чтобы спроектировать различные элементы и заставить их работать вместе, но это не невозможно, особенно если учесть, что у него есть возможность довольно хорошо масштабироваться (добавление более доступных/более мощных серверов). ).

Я разработал аналогичную систему, в которой пользователь может отправить запрос данных из веб-интерфейса, который будет получен службой диспетчера запросов, которая делегирует запрос соответствующему серверу в зависимости от типа запроса, предоставляя при этом индикацию хода выполнения для клиент.

person Jason Miesionczek    schedule 29.09.2009
comment
Хороший дизайн решения проблемы - person NotMe; 29.09.2009
comment
Это похоже на то, что я вижу, работает на нас. Самая большая проблема, которую я вижу, заключается в том, что у нас есть всевозможные аргументы, которые передаются в фактические генераторы отчетов, включая массивы. Как вы можете сохранить такие данные в столбец аргументов базы данных? - person Jeffrey; 29.09.2009
comment
если вы используете SQL Server, существует тип данных, называемый XML, который, если вы используете VB.NET, вы должны иметь возможность инкапсулировать параметры отчета в объект, а затем сериализовать его и поместить в этот столбец. - person Jason Miesionczek; 29.09.2009
comment
Потрясающий. Именно то, что я искал. - person Jeffrey; 29.09.2009
comment
он также будет работать так же хорошо с обычным текстовым столбцом, это просто XML-текст, который будет десериализован сервером отчетов. - person Jason Miesionczek; 29.09.2009

Как насчет того, чтобы написать веб-сервис, который принимает запросы на отчеты. По завершении отчеты могут быть отправлены пользователям по электронной почте. Веб-служба может предоставить метод состояния, который позволяет вашему приложению WinForms запрашивать текущее состояние запросов отчета.

person D'Arcy Rittich    schedule 29.09.2009