Конференция "Corba" » Некоторые общие вопросы по COM [Delphi, Windows, >=XP]
 
  • Дмитрий С (01.04.09 08:57) [0]
    Начитался разных статей на rsdn по поводу КОМ-а, но не нашел ответа на такие вопросы:
    1. События. Обязательно ли использовать IConnectionPoint для создания событий, если у моего объекта будет гарантированно только один клиент. Можно ли просто передавать от клиента серверу интерфейс, через который будут осуществляться передача событий? Сможет ли при этом клиент олицетворить (имперсонировать) серверную учетную запись?

    2. Что будет с объектами если связь прервется. Или прервется, а затем восстановится?

    3. Про ссылки на объект я не очень понял. Если на объект на клиенте больше нет ссылок, на сервере он уничтожится? (Естественно, при нормально обработке _AddRef и _Release)?

    Вот вроде все пока.
  • Григорьев Антон © (05.04.09 09:35) [1]

    > Можно ли просто передавать от клиента серверу интерфейс,
    >  через который будут осуществляться передача событий?

    Можно. IConnectionPoint появился в COM не сразу, а до этого все использовали именно такой способ, и он до сих пор, естественно, поддерживается. Только какой в этом смысл? IConnectionPoint реализуется, конечно, сложнее, чем простой интерфейс, но так как всю чёрную работу берёт на себя среда, для программиста в итоге это оказывается даже проще.

    > Сможет ли при этом клиент олицетворить (имперсонировать)
    > серверную учетную запись?

    Вроде бы да, но точно не уверен.

    > Что будет с объектами если связь прервется. Или прервется,
    >  а затем восстановится?

    Восттановление связи - очень слабое место в DCOM. Такое впечатление, что программисты, которые писали взаимодействие по сети, имели весьма смутные представления о том, что связь может рваться, и как её надо восстанавливать. При потере связи при очередном вызове клиент получит HRESULT, в котором поле ErrorCode (последние 16 бит) будет иметь значение RPC_S_SERVER_UNAVAILABLE или RPC_S_CALL_FAILED. После этого система предпримет попытки восстановить связь, но если ей не удастся сделать это быстро, то новые попытки не предпринимаются, и нужно заново создавать объект (что может привести к потере данных, если это был объект с состоянием, так как к старому объекту подключиться уже не будет возможности - система на стороне сервера закроет все ссылки, и объект будет уничтожен).

    > Если на объект на клиенте больше нет ссылок, на сервере
    > он уничтожится?

    Да.
 
Конференция "Corba" » Некоторые общие вопросы по COM [Delphi, Windows, >=XP]
Есть новые Нет новых   [134427   +34][b:0][p:0]