Compartilhar via


Diretrizes de aplicativo cliente/servidor

Os aplicativos cliente/servidor não devem assumir que uma única conexão de computador seja equivalente a uma única sessão de usuário. Esse é um caso especial do problema discutido em Endereços IP e Nomes de Computador.

Para identificar exclusivamente uma conexão cliente/servidor, cada módulo do cliente deve usar um nome ou identificador exclusivo. Os aplicativos podem usar objetos nomeados ou pipes, soquetes ou outros métodos IPC. Para obter mais informações, consulte Namespaces de objeto kernel.

Para ser compatível com os Serviços de Área de Trabalho Remota, o módulo de servidor em um aplicativo cliente/servidor deve ser capaz de lidar com vários clientes que se conectam do mesmo computador. Para fazer isso, o módulo do servidor deve aceitar conexões de cliente por meio de uma interface global bem definida, como RPC ou pipes nomeados. O servidor e o cliente devem negociar um canal de comunicação diferente para cada sessão de usuário. O cliente deve estabelecer uma conexão com o servidor usando protocolos que dão suporte facilmente a esse tipo de operação, como TCP/IP, em que uma conexão de soquete diferente pode ser usada para cada aplicativo cliente.

O módulo cliente pode chamar a função ProcessIdToSessionId para recuperar o identificador de sua sessão de Serviços de Área de Trabalho Remota. Em seguida, o cliente usa alguma forma de comunicação entre processos para passar seu identificador de sessão para o módulo do servidor. Os módulos cliente e servidor podem usar o identificador de sessão para configurar um canal de comunicação privado. Por exemplo, o módulo do servidor pode usar um identificador de sessão para acessar objetos no namespace da sessão para objetos kernel.

Além disso, o módulo do servidor pode usar o identificador de sessão em uma chamada WTSQuerySessionInformation para recuperar informações adicionais sobre o cliente. O módulo do servidor também pode usar o identificador de sessão em uma chamada WTSSendMessage para exibir uma mensagem no terminal do cliente. O módulo do servidor também pode criar dois eventos para monitorar a conexão do cliente com e a desconexão de uma sessão. No entanto, ele deve ser registrado no servidor Host da Sessão da Área de Trabalho Remota (Host de Sessão de Área de Trabalho Remota) para fazer isso. Para obter mais informações, consulte Monitoramento de conexões de sessão e desconexões.

Os prompts de entrada do usuário são uma possível fonte de problemas para aplicativos cliente/servidor. Por exemplo, se um serviço chamar a função MessageBox , a caixa de mensagem será exibida na área de trabalho do servidor host da Sessão de Área de Trabalho Remota, não na área de trabalho do cliente. Para exibir uma mensagem em uma área de trabalho do cliente, o serviço pode chamar a função WtsSendMessage . Como alternativa, o serviço pode solicitar entrada do módulo cliente e o módulo cliente pode exibir a interface do usuário e enviar a entrada resultante de volta para o serviço.

Os processos gerados de várias sessões podem enviar dados e receber dados uns dos outros por meio do uso de blocos de memória compartilhados. Para obter mais informações, consulte Criando memória compartilhada nomeada. A memória compartilhada não pode ser usada nas seguintes condições:

  • Os processos que usam o bloco de memória compartilhada foram gerados por várias sessões.
  • As sessões compartilham a mesma credencial de autenticação de usuário.