Partilhar via


O leve manipulador de Client-Side

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.

O manipulador OLE