Partilhar via


Diretrizes de aplicativos cliente/servidor

Os aplicativos cliente/servidor não devem assumir que uma única conexão de computador é equivalente a uma única sessão de usuário. Este é um caso especial da questão discutida em Endereços IP e Nomes de Computadores.

Para identificar exclusivamente uma conexão cliente/servidor, cada módulo 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 Kernel Object Namespaces.

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 a partir 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 suportam facilmente esse tipo de operação, como TCP/IP, onde uma conexão de soquete diferente pode ser usada para cada aplicativo cliente.

O módulo cliente pode chamar a funçãoProcessIdToSessionId para recuperar o identificador de sua sessão dos 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 de servidor pode usar um identificador de sessão para acessar objetos no namespace da sessão para objetos do kernel.

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

Os prompts para entrada do usuário são uma fonte potencial 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 RD, 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çãoWtsSendMessage. 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 a partir de várias sessões podem enviar e receber dados uns dos outros através do uso de blocos de memória compartilhada. 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 usando o bloco de memória compartilhada foram gerados por várias sessões.
  • As sessões compartilham a mesma credencial de autenticação do usuário.