Я работаю с довольно большим веб-приложением .net.
Пользователи хотят иметь возможность экспортировать отчеты в PDF. Поскольку отчеты основаны на агрегировании многих уровней данных, лучший способ получить точный снимок - это сделать снимок пользовательского интерфейса. Я могу взять HTML-код пользовательского интерфейса и преобразовать его в файл PDF.
Поскольку загрузка пользовательского интерфейса может занять до 30 секунд, но результаты никогда не меняются, я хочу кэшировать PDF-файл, как только элемент будет сохранен в фоновом потоке.
Меня больше всего беспокоит этот метод, так как при просмотре пользовательского интерфейса мне приходится беспокоиться о тайм-аутах. В то время как фоновые потоки и тому подобное могут длиться столько, сколько они хотят, страницы aspx существуют только до тех пор, пока они не будут завершены.
У меня есть две идеи, как с этим справиться. Первая идея - создать страницу aspx, которая загружает пользовательский интерфейс, переопределяет рендеринг и сохраняет обработанные данные в базе данных. Фоновый поток выполнит WebRequest для этой страницы внутри, а затем получит результаты из базы данных. Это, очевидно, должно учитывать безопасность, а также нужно беспокоиться о тайм-аутах, если пользовательский интерфейс создается слишком долго.
Другая идея - создать объект страницы и заполнить его вручную в коде, вручную вызвать соответствующие методы, а затем извлечь из него данные. Проблема с этим методом, помимо того, что я не знаю, как это сделать, состоит в том, что я боюсь, что могу забыть вызвать метод, или что-то может работать неправильно, потому что на самом деле он не связан с реальным сеансом или веб-сервером.
Как лучше всего имитировать пользовательский интерфейс страницы в фоновом потоке?
@RickNZ: Это не в моем списке из-за уровня требуемых усилий, но если вы можете подумать о способе решения проблемы тайм-аута, которую вызовет веб-запрос, и проблема цикла, создающая страницу в фоновом потоке,потому что я весь уши.
– diadem23 ноября 2009, 14:16