Что определяет, сколько времени занимает COM-сервер вне процесса, чтобы заметить, что клиент умер? - PullRequest
5 голосов
/ 24 февраля 2010

В простой установке Windows у нас есть синглтон COM, который работает как внепроцессный сервер.

Клиенты подключаются, вызывая cocreate, и каждый получает интерфейс к одному и тому же экземпляру сервера.

Если клиенты выключаются нормально, они выпускают свои ссылки.

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

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

Я замечаю, что по истечении 8 минут в течение неопределенного периода времени сервер получает вызовы выпуска для заглушек любых объектов, с которых сервер возвращал интерфейсы клиенту. Похоже, это автоматическая очистка, которая, как я предполагаю, запускается слоем LRPC.

Это где-нибудь задокументировано и настраивается ли тайм-аут?

Примечание: многопоточная модель квартиры используется повсеместно.

1 Ответ

7 голосов
/ 24 февраля 2010

Это https://web.archive.org/web/20171228092925/http://www.microsoft.com/msj/0398/dcom.aspx в Сборка мусора DCOM , по-видимому, указывает на то, что DCOM использует 120-секундный тайм-аут, который необходимо пропустить три раза, поэтому около 6 минут клиент будет считаться отключенным. К сожалению, это также указывает на то, что это не настраивается пользователем, и я не могу найти ничего наоборот.

...