asv>Сервер: один exe-модуль с одним объектом (и одним экземпляром объекта). Объект, реализующий соединение с сервером на стороне клиента (т.е. хранящий указатель на серверный объект и принимающий события от сервера), заключен в dll. Этот объект может использоваться как exe-приложениями (на VC, VB и т.д.), так и ActiveX-ами, которые в свою очередь могут быть вставлены в контейнер типа того же VB. Клиенты обращаются к серверу либо по событию от сервера ("данные изменились, нужно считать"), либо по своей собственной инициативе (если они хотят туда что-то записать). Ну вот и хотелось бы доработать вот этот универсальный клиентский объект, чтобы он мог восстанавливать соединение при перезагрузке сервера.
На ум пришёл явный способ восстановления соединения.
1. На клиенте пишешь COM-SINGLETON с методом OnResumeConnection. (см. дальше)
На сервере добавляешь метод NotifyOnResumeConnection(адрес клиента), который добавляет данного клиента в список для извещения о обрыве связи.
2. Сервер сохраняет:
2.1 Cвоё состояние
2.2 Cписок клиентов
2.3 Состояние клиента (что именно сохранять уже думать тебе, в зависимости от требований по восстановлению)
После запуска сервера он проверяет был ли выход корректным, и если нет, то создаёт обьект на клиентах из списка и вызывает метод OnResumeConnection(...). Самое главное здесь определить промежуточные состояния, (которые будут сохраниться, и для которых возможно корректное восстановление) и реализовать OnResumeConnection. Для не очень сложного проекта или небольшого числа обьектов может и подойдёт.
PS. В OnResumeConnection ты можешь передавать указатель на новый экземпляр сервера.
Tom>>Если очень хочется чего нибудь с этим сделать, то напиши свой DCOM транспорт, который автоматом будет контроллировать всякую бяку, но это от всего гемороя тебя не спасёт.
У нас в одном проекте именно так эта проблемма и решена. (хотя это крайний выход)