O manipulador leve do lado do cliente
Manipuladores leves do lado do cliente permitem que você crie manipuladores gerais do lado do cliente de qualquer tamanho, para ajudá-lo a fazer qualquer tipo de tarefa padrão. Como manipuladores, eles são utilizáveis por mais de um cliente. Eles diferem dos manipuladores OLE porque não podem ser criados antes que o servidor seja iniciado e seu tempo de vida esteja vinculado ao do gerenciador de proxy, impedindo uma possível condição de corrida na qual o manipulador poderia ser liberado prematuramente.
O gerenciador de proxy é o objeto criado pelo sistema que implementa a interface IMarshal. Se você usar marshaling padrão, o sistema o criará para você quando você chamar CoGetStandardMarshal (ou CoGetStdMarshalEx, para criar um marshaler agregado para manipuladores leves) e também implementará as interfaces IClientSecurity e IMultiQI no objeto. No lado do servidor, há um objeto de sistema correspondente que também implementa o IMarshal. Esses objetos lidam com marshaling para você de forma transparente.
Há dois tipos gerais desses manipuladores que você pode querer implementar:
- Um manipulador que executa um serviço que não requer dados extras do servidor
- Um manipulador que usa dados extras do servidor
Alguns usos potenciais dos dados extras no fluxo fornecido pelo servidor são os seguintes:
- Dados estáticos do servidor. Independentemente da interface específica que está sendo empacotada, o servidor grava os mesmos dados no fluxo.
- Dados por interface do servidor. Dependendo de qual interface específica está sendo empacotada, o servidor pode gravar dados diferentes no fluxo.
- Ajudantes por interface. Componentes COM por interface agregados ao manipulador do cliente e delegados ao proxy padrão. Por exemplo, para melhorar o desempenho da rede, um componente COM para IStream poderia fazer cache de dados do lado do cliente, read-ahead, write-behind, op-locking e assim por diante.
- Versão de rede de uma interface. A versão de rede da interface é diferente da interface exposta pelo código do aplicativo cliente e servidor. É possível, por exemplo, multiplexar interfaces expostas IA e IB sobre a mesma interface de rede INetAB, da mesma forma que o manipulador de servidor de incorporação. Por exemplo, pode-se converter uma interface de transferência de dados em uma interface de rede que usa pipes para transferência de dados eficiente.
Os clientes de nível inferior podem não ter a capacidade de desempacotar interfaces que tenham manipuladores personalizados, por dois motivos: primeiro, eles podem não entender o CLSID usado no pacote empacotado personalizado quando o manipulador de servidor é agregado e o objeto deseja um manipulador. Em segundo lugar, o código do manipulador pode nem mesmo ser executado no lado do cliente se ele exigir nova funcionalidade do COM para criar o marshaler padrão agregado e fazer chamadas QueryInterface remotas.
Tópicos relacionados