Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Manipuladores leves do lado do cliente permitem que você crie manipuladores gerais do lado do cliente de qualquer tamanho, para ajudá-lo a executar 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 está 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 o IMarshal interface. Se usar intermediação padrão, o sistema a criará para si quando chamar CoGetStandardMarshal (ou CoGetStdMarshalEx, para criar um empacotador 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 IMarshal. Esses objetos lidam com a preparação de dados (marshaling) de forma transparente para si.
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á a ser marchetada, o servidor escreve os mesmos dados no fluxo.
- Dados do servidor por interface. Dependendo de qual interface específica está sendo empacotada, o servidor pode gravar dados diferentes no fluxo.
- Auxiliares por interface. Componentes COM por interface agregados no gestor de cliente e delegados ao proxy padrão. Por exemplo, para melhorar o desempenho da rede, um componente COM para IStream pode 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 as interfaces expostas IA e IB sobre a mesma interface de rede INetAB, da mesma forma que o gestor de servidor de incorporação realiza. Por exemplo, pode-se converter uma interface de transferência de dados em uma interface de rede que usa tubos 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 uma nova funcionalidade do COM para criar o empacotador padrão agregado e fazer chamadas remotas QueryInterface.
Tópicos relacionados