2009-07-13 6 views
2

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

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

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

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

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

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

+0

Чтобы уточнить, вы сказали: «Я не могу переместить вызовы к нашему устаревшему коду для разделения процессов». Означает ли это, что вы не можете обернуть вызовы в асинхронном потоке и просто проверить статус этого потока в течение минуты и прервать поток, если он не завершится вовремя? Это то, что меня поразило как непосредственный ответ на ваш вопрос, но если вы ограничены каким-то образом, что вы не можете это сделать, можете ли вы, пожалуйста, рассказать об этом? – joshlrogers

+0

Да, вы правы - я не могу обернуть вызов устаревшему коду в асинхронном потоке. Это то, что я изначально хотел сделать, но не смог. – brokenisfixed

ответ

2

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

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

+0

Автоматический перезапуск кажется довольно сложным. Вероятно, мне следовало бы попробовать подойти к сторожевой собаке. Может быть, у вас есть образцы кода в C#? – brokenisfixed

+0

У меня нет кода, который я могу разделить, извините. Как это работает, вы начинаете свою службу, и она запускает сторожевой таймер, передавая свой собственный идентификатор процесса сторожевому пса, чтобы последний знал, где искать. – lavinio

+0

Мы решили внедрить услугу стиля watch-dog, чтобы следить за другим процессом. Спасибо! – brokenisfixed

Смежные вопросы