Compartilhar via


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 original do KB: 307445

Resumo

Este artigo ilustra como criar um servidor remoto que outro aplicativo possa 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 de servidor é o objeto com o qual o cliente se comunica e o aplicativo de servidor é usado para registrar o objeto de servidor com a estrutura de tempo de execução de Comunicação Remota do .NET.

Este artigo refere-se aos seguintes namespaces da Biblioteca de Classes do 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 do 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 servidor. O aplicativo cliente faz isso por meio de um objeto proxy criado no cliente. Neste exemplo, o objeto de servidor reside em uma DLL (Biblioteca de Classes) e é chamado myRemoteClass.

  1. Crie um novo aplicativo de Biblioteca de Classes no Visual C# .NET. Nomeie o projeto ServerClass. Class1 é criado por padrão.

  2. No 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 a myRemoteClass que usa uma cadeia de caracteres, exibe uma mensagem para o 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 a ServerClass.dll montagem.

  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 na estrutura de comunicação remota. Ao registrar o objeto, você também deve iniciar o servidor e fazer com que o servidor escute em uma porta para que os clientes se conectem a essa porta. Para fazer isso, você precisa de um tipo de projeto que gere um arquivo executável.

O motivo para incluir o objeto de servidor em um projeto separado é para que você possa referenciar facilmente o objeto de 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. Class1 é criado por padrão.

  2. No 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 assembly ServerClass.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 precise 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 para 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 do 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 na estrutura de comunicação remota e especifique os seguintes parâmetros:

    • O nome completo do tipo do objeto que está sendo registrado (que é ServerClass.myRemoteClass neste exemplo), seguido pelo nome do assembly ServerClass. Especifique o nome do namespace e 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 modo de SingleCall 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 Console método do objeto para manter o aplicativo de servidor em execução.

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

  10. Salve e feche o projeto.

Referências

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