Usar o Visual C# para criar um servidor remoto

Este artigo ajuda você a criar um servidor remoto onde outro aplicativo pode acessar usando o Visual C#.

Versão original do produto: Visual C#
Número de KB original: 307445

Resumo

Este artigo ilustra como criar um servidor remoto que outro aplicativo pode acessar. O aplicativo que acessa esse servidor pode estar localizado no mesmo computador, em um computador diferente ou em uma rede diferente. O servidor remoto é dividido em duas partes: o objeto do servidor e o aplicativo do servidor. O objeto do servidor é o objeto com o qual o cliente se comunica e o aplicativo do servidor é usado para registrar o objeto do servidor com a estrutura de tempo de execução do .NET Remoting.

Este artigo refere-se aos seguintes namespaces da Biblioteca de Classes da Microsoft .NET Framework:

  • System.Runtime.Remoting
  • System.Runtime.Remoting.Channels
  • System.Runtime.Remoting.Channels.Tcp

Requisitos

Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:

  • Visual Studio .NET ou Visual Studio
  • Visual C# .NET ou Visual C#
  • Rede

Criando o objeto de servidor remoto

A primeira etapa na criação do aplicativo de servidor é criar um objeto de servidor. O objeto do servidor é o que o aplicativo cliente instancia e se comunica no computador do servidor. O aplicativo cliente faz isso por meio de um objeto proxy criado no cliente. Neste exemplo, o objeto do servidor reside em uma DLL (Biblioteca de Classes) e é chamado de myRemoteClass.

  1. Crie um novo aplicativo da Biblioteca de Classes no Visual C# .NET. Nomeie o projeto ServerClass. A classe1 é criada por padrão.

  2. Em Gerenciador de Soluções, renomeie o arquivo de código Class1.cs para ServerClass.cs.

  3. Abra ServerClass.cs e renomeie Class1 para myRemoteClass. Você também precisa renomear o construtor padrão da classe para que ele corresponda ao nome da classe. myRemoteClass deve herdar da MarshalByRefObject classe. Sua classe agora deve aparecer da seguinte maneira:

    public class myRemoteClass: MarshalByRefObject
    {
        public myRemoteClass()
        {
          // TO DO: Add constructor logic here.
        }
    }
    
  4. Adicione um método público ao myRemoteClass que usa uma cadeia de caracteres, exibe uma mensagem no console com um valor da cadeia de caracteres e retorna True se a cadeia de caracteres não estiver vazia.

    public bool SetString(String sTemp)
    {
         try
         {
             Console.WriteLine("This string '{0}' has a length of {1}", sTemp, sTemp.Length);
             return sTemp != "";
         }
         catch
         {
             return false;
         }
    }
    
  5. Crie o projeto para criar o assemblyServerClass.dll .

  6. Salve e feche o projeto.

Criar o aplicativo de servidor remoto

Depois de criar o objeto de servidor com o qual o cliente se comunicará, você deve registrar esse objeto com a estrutura Remoting. Ao registrar o objeto, você também deve iniciar o servidor e fazer com que o servidor ouça em uma porta para que os clientes se conectem a essa porta. Para fazer isso, você precisa de um tipo de projeto que produz um arquivo executável.

O motivo para incluir o objeto do servidor em um projeto separado é para que você possa fazer referência facilmente ao objeto do servidor do projeto cliente. Se você incluí-lo neste projeto, não poderá referenciá-lo, pois as referências só podem ser definidas como arquivos DLL.

  1. Crie um novo aplicativo de console no Visual C# .NET para iniciar o servidor remoto. A classe1 é criada por padrão.

  2. Em Gerenciador de Soluções, renomeie o arquivo Class1.cs para RemoteServer.cs.

  3. Adicione uma referência ao System.Runtime.Remoting namespace.

  4. Adicione uma referência ao assemblyServerClass.dll que você criou na seção anterior.

  5. Use a using instrução nos Remotingnamespaces , Remoting.Channelse Remoting.Channels.TCP para que você não seja obrigado a qualificar declarações nesses namespaces posteriormente em seu código. Você deve usar a using instrução antes de qualquer outra declaração.

    using System.Runtime.Remoting;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Tcp;
    
  6. Declare a variável apropriada. Declare e inicialize um TcpChannel objeto que escuta os clientes se conectarem em uma determinada porta, que é a porta 8085 neste exemplo. Use o RegisterChannel método para registrar o canal com os serviços de canal. Adicione o seguinte código de declaração no Main procedimento de Class1:

    TcpChannel chan = new TcpChannel(8085);
    ChannelServices.RegisterChannel(chan);
    
  7. Chame o RegisterWellKnownType método do RemotingConfiguration objeto para registrar o ServerClass objeto com a estrutura de Remoção e especifique os seguintes parâmetros:

    • O nome de tipo completo do objeto que está sendo registrado (que é ServerClass.myRemoteClass neste exemplo), seguido pelo nome do assembly ServerClass. Especifique o nome do namespace, bem como o nome da classe aqui. Como você não especificou um namespace na seção anterior, o namespace raiz padrão é usado.

    • Nomeie o ponto de extremidade em que o objeto deve ser publicado como RemoteTest. Os clientes precisam saber esse nome para se conectar ao objeto.

    • Use o SingleCall modo de objeto para especificar o parâmetro final. O modo de objeto especifica o tempo de vida do objeto quando ele é ativado no servidor. No caso de SingleCall objetos, uma nova instância da classe é criada para cada chamada que um cliente faz, mesmo que o mesmo cliente chame o mesmo método mais de uma vez. Por outro lado, Singleton os objetos são criados apenas uma vez e todos os clientes se comunicam com o mesmo objeto.

      RemotingConfiguration.RegisterWellKnownServiceType(
      System.Type.GetType("ServerClass.myRemoteClass, ServerClass"),
      "RemoteTest",
      WellKnownObjectMode.SingleCall);
      
  8. Use o ReadLine método do Console objeto para manter o aplicativo do servidor em execução.

    System.Console.WriteLine("Hit <enter> to exit...");
    System.Console.ReadLine();
    
  9. Crie seu projeto.

  10. Salve e feche o projeto.

Referências

Para obter uma visão geral do .NET Remoting, consulte a documentação .NET Framework Guia do Desenvolvedor.