Пишу сервер сообщений.
Предполагаемая схема работы следующая:
1. Сервис создает COM+ объект (синглетон) с дефалтовым интерфейсом IMessServer.
2. Клиент создает у себя COM+ объект с дефалтовым интерфейсом IClientServer,
вызывает метод IMessServer.AddConnect(IClientServer) у созданного на сервере
объекта (синглетона), который в свою очередь регистрирует в списке клиентов
этот интерфейс.
3. Клиент посылает сообщение используя метод IMessServer.SendNotice(UserName, ...).
4. Сервер находит в списке клиентских интерфейсов тот, которому было послано
сообщение и вызывает у него метод IClientServer.Callback(...);
Оцените схему.
Как быть, если в спиcке оказался "мертвый интерфейс"

Спасибо.
... << RSDN@Home 1.1.3 stable >>
Здравствуйте, sinnus, Вы писали:
S>Пишу сервер сообщений.
S>Предполагаемая схема работы следующая:
S>1. Сервис создает COM+ объект (синглетон) с дефалтовым интерфейсом IMessServer.
S>2. Клиент создает у себя COM+ объект с дефалтовым интерфейсом IClientServer,
S>вызывает метод IMessServer.AddConnect(IClientServer) у созданного на сервере
S>объекта (синглетона), который в свою очередь регистрирует в списке клиентов
S>этот интерфейс.
S>3. Клиент посылает сообщение используя метод IMessServer.SendNotice(UserName, ...).
S>4. Сервер находит в списке клиентских интерфейсов тот, которому было послано
S>сообщение и вызывает у него метод IClientServer.Callback(...);
S>Оцените схему.
S>Как быть, если в спиcке оказался "мертвый интерфейс"
S>Спасибо.
Самому было интересно, что скажут гуру по такой схеме... Но все молчат, от себя могу сказать следующее: использую практически такую схему, всё работает как часы... По поводу мёртвых интерфейсов — вызываю их методы через try except, в случае except выкидываю из списка клиентов (можно дополнительно вызывать какой ниб метод, для проверки).
Здравствуйте, <Аноним>, Вы писали:
[skip]
А>Самому было интересно, что скажут гуру по такой схеме... Но все молчат, от себя могу сказать следующее: использую практически такую схему, всё работает как часы... По поводу мёртвых интерфейсов — вызываю их методы через try except, в случае except выкидываю из списка клиентов (можно дополнительно вызывать какой ниб метод, для проверки).
Спасибо. Хоть кто-то ответил

... << RSDN@Home 1.1.3 stable >>
Здравствуйте, sinnus, Вы писали:
S>Пишу сервер сообщений.
S>Предполагаемая схема работы следующая:
S>1. Сервис создает COM+ объект (синглетон) с дефалтовым интерфейсом IMessServer.
S>2. Клиент создает у себя COM+ объект с дефалтовым интерфейсом IClientServer,
S>вызывает метод IMessServer.AddConnect(IClientServer) у созданного на сервере
S>объекта (синглетона), который в свою очередь регистрирует в списке клиентов
S>этот интерфейс.
S>3. Клиент посылает сообщение используя метод IMessServer.SendNotice(UserName, ...).
S>4. Сервер находит в списке клиентских интерфейсов тот, которому было послано
S>сообщение и вызывает у него метод IClientServer.Callback(...);
S>Оцените схему.
S>Как быть, если в спиcке оказался "мертвый интерфейс"
S>Спасибо.
Если это возможно, то лучше всего использовать COM+ события. Если нет — то делай как делаешь. Мёртвых клиентов можно просто выбросить из списка и продолжить вызывать других клиентов. Вот только будет проблемма в том, что клиенты вызываются последовательно, по этому, если один тормозит — все ждут, по сему вызов клиентов можно реализовать на пуле потоков.
Здравствуйте, Tom, Вы писали:
[skip]
Tom>Если это возможно, то лучше всего использовать COM+ события. Если нет — то делай как делаешь. Мёртвых клиентов можно просто выбросить из списка и продолжить вызывать других клиентов. Вот только будет проблемма в том, что клиенты вызываются последовательно, по этому, если один тормозит — все ждут, по сему вызов клиентов можно реализовать на пуле потоков.
COM+ события использовать не получится.
И как определить, что клиенты "мертвые". По exception?
... << RSDN@Home 1.1.3 stable >>
Здравствуйте, Tom, Вы писали:
S>>По exception?
Tom>Да. Только так
Жалко, т.к. много времени будет уходить на это

... << RSDN@Home 1.1.3 stable >>