COM-сервер зависания - обнаружение и разрешение - PullRequest
3 голосов
/ 23 августа 2010

У меня есть приложение, которое отправляет запросы на COM-сервер вне процесса, который обрабатывает запросы и отправляет их обратно запрашивающему приложению.

Клиентское приложение действительно контролирует запуск и остановку этогоOut-of-Proc COM-сервер и определяет его срок службы, так сказать.

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

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

Иногда случается, что клиентское приложение запрашивает уничтожение COM-сервера, что приводит к тому, что клиент освобождает все ссылки на COM-сервер, но COM-сервер в итоге просто использует 25%процессора и просто никогда не умирает.Кажется, что он просто зависает и постоянно использует процессор.

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

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

1 Ответ

1 голос
/ 23 августа 2010

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

...