Таймеры в Сервисах

2

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

  • Пользователь загружает документ;
  • После того, как пользователь открывает информационную карту документа, выдается предварительный просмотр недавно загруженного документа (информация об образовании предварительного просмотра хранится в таблице db);
  • Каждые 30 секунд начинается наша служба, просматривает таблицу предварительного просмотра и инициирует процедуры генерации предварительного просмотра.

Проблема, с которой я столкнулся сейчас, заключается в следующем: новый код для создания превью использует некоторый наш старый код, и иногда он "замораживает" процессы Word или Excel. Генерация предварительных остановок и все последующие превью остаются в режиме ожидания, пока я не убью процессы Word, Excel (мы проверяем предварительный просмотр документов MS Office). После того как я убью процессы, процесс предварительного просмотра продолжается.

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

Основная проблема, с которой я сталкиваюсь, заключается в том, что я не могу "переместить" призывы к нашему устаревшему коду для разделения процессов, как это было сделано с другими документами (например, мы реализовали генерацию файла .ps с помощью GhostScript через Process'es).

Любые идеи о том, как "обрабатывать" призывы к устаревшему коду?

  • 0
    Просто чтобы уточнить, вы сказали: «Я не могу переместить вызовы нашего унаследованного кода в отдельные процессы». Означает ли это, что вы не можете обернуть вызовы в асинхронный поток и просто проверить состояние этого потока на минуту и прервать поток, если он не завершился вовремя? Это то, что показалось мне немедленным ответом на ваш вопрос, но если вы каким-то образом ограничены в том, что вы не можете этого сделать, не могли бы вы уточнить это?
  • 0
    Да, вы правы - я не могу обернуть вызов унаследованного кода в асинхронный поток. Это то, что я изначально хотел сделать, но не смог.
Теги:
timer
process
server-side

1 ответ

2
Лучший ответ

Можете ли вы сделать второй процесс, который является сторожевым псом в первом процессе?

Или вы можете сделать первый процесс автоматического перезапуска и иметь второй поток таймера, который его контролирует, а затем убивает свой собственный процесс?

  • 0
    Автозапуск кажется довольно сложным. Я, наверное, должен попробовать подход сторожевой собаки. Может быть, у вас есть примеры кода на C #?
  • 0
    У меня нет кода, которым я могу поделиться, извините. Однако он работает так: вы запускаете службу и запускаете сторожевой таймер, передавая свой собственный идентификатор процесса сторожевому таймеру, чтобы последний знал, где искать.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню