Gestionnaire de Client-Side léger

Les gestionnaires légers côté client vous permettent de créer des gestionnaires généraux côté client de n’importe quelle taille, pour vous aider à effectuer n’importe quel type de tâche standard. En tant que gestionnaires, ceux-ci sont utilisables par plusieurs clients. Ils diffèrent des gestionnaires OLE par le fait qu’ils ne peuvent pas être créés avant le lancement du serveur et que leur durée de vie est liée à celle du gestionnaire de proxys, ce qui empêche une condition de concurrence possible dans laquelle le gestionnaire pourrait sinon être libéré prématurément.

Le gestionnaire de proxys est l’objet créé par le système qui implémente l’interface IMarshal . Si vous utilisez le marshaling standard, le système le crée pour vous lorsque vous appelez CoGetStandardMarshal (ou CoGetStdMarshalEx, pour créer un marshaleur agrégé pour les gestionnaires légers) et implémente également les interfaces IClientSecurity et IMultiQI sur l’objet. Côté serveur, il existe un objet système correspondant qui implémente également IMarshal. Ces objets gèrent le marshaling pour vous en toute transparence.

Il existe deux types généraux de ces gestionnaires que vous pouvez implémenter :

  • Gestionnaire qui exécute un service qui ne nécessite aucune donnée supplémentaire du serveur
  • Gestionnaire qui utilise des données supplémentaires du serveur

Voici quelques utilisations potentielles des données supplémentaires dans le flux fourni par le serveur :

  • Données statiques du serveur. Quelle que soit l’interface particulière marshalée, le serveur écrit les mêmes données dans le flux.
  • Données par interface provenant du serveur. Selon l’interface en cours de marshalation, le serveur peut écrire différentes données dans le flux.
  • Assistances par interface. Composants COM par interface agrégés dans le gestionnaire client et délégués au proxy standard. Par exemple, pour améliorer les performances réseau, un composant COM pour IStream peut effectuer la mise en cache côté client des données, la lecture anticipée, l’écriture-behind, le verrouillage d’opération, etc.
  • Version réseau d’une interface. La version réseau de l’interface est différente de l’interface exposée par le code de l’application cliente et serveur. Il est possible, par exemple, de multiplexer les interfaces IA et IB exposées sur la même interface réseau INetAB, comme le fait le gestionnaire de serveur d’incorporation. Par exemple, vous pouvez convertir une interface de transfert de données en interface réseau qui utilise des canaux pour un transfert de données efficace.

Les clients de bas niveau peuvent ne pas avoir la possibilité de démarshaler les interfaces qui ont des gestionnaires personnalisés, pour deux raisons : Tout d’abord, ils peuvent ne pas comprendre le CLSID utilisé dans le paquet marshalé personnalisé lorsque le gestionnaire de serveur est agrégé et que l’objet souhaite un gestionnaire. Deuxièmement, le code du gestionnaire peut même ne pas s’exécuter côté client s’il nécessite de nouvelles fonctionnalités de COM pour créer le marshaleur standard agrégé et effectuer des appels QueryInterface distants.

Gestionnaire OLE