Есть ли нормальный способ «пинговать» COM-объект? - PullRequest
0 голосов
/ 16 февраля 2020

Я обнаружил, что при реализации IP C или других COM-интерфейсов, где сервер находится в другой квартире, я иногда хочу «пинговать» объект, чтобы увидеть, жив ли другой конец. Если я управляю интерфейсом, я могу добавить к нему метод Ping(), но мне интересно, есть ли более встроенный способ.

Есть ли способ без генерации traffi приложения c для проверки если сервер жив?

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

Мое намерение состоит в том, чтобы просто поддерживать логи приложения c бездействующими - я не хочу отправлять синтаксис c traffi c на сервер, просто чтобы убедиться, что он жив. Я также не хочу отслеживать процесс или сбои, так как может работать несколько экземпляров этого приложения. Найти процесс, в котором размещен сервер для моего указанного c COM-объекта, может быть непросто - и это не значит, что он находится в состоянии, которое может принимать вызовы. Я также не могу использовать параметры восстановления службы NT, так как он запускается в пользовательском сеансе.

Будет QueryInterface для несуществующего IID работать для генерации RPC_E_DISCONNECTED и аналогичных или может быть обработано прокси ( скрытие проблем с сервером)?

...