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.
Crie um novo aplicativo da Biblioteca de Classes no Visual C# .NET. Nomeie o projeto ServerClass. A classe1 é criada por padrão.
Em Gerenciador de Soluções, renomeie o arquivo de código Class1.cs para ServerClass.cs.
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. } }
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; } }
Crie o projeto para criar o assemblyServerClass.dll .
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.
Crie um novo aplicativo de console no Visual C# .NET para iniciar o servidor remoto. A classe1 é criada por padrão.
Em Gerenciador de Soluções, renomeie o arquivo Class1.cs para RemoteServer.cs.
Adicione uma referência ao
System.Runtime.Remoting
namespace.Adicione uma referência ao assemblyServerClass.dll que você criou na seção anterior.
Use a
using
instrução nosRemoting
namespaces ,Remoting.Channels
eRemoting.Channels.TCP
para que você não seja obrigado a qualificar declarações nesses namespaces posteriormente em seu código. Você deve usar ausing
instrução antes de qualquer outra declaração.using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp;
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 oRegisterChannel
método para registrar o canal com os serviços de canal. Adicione o seguinte código de declaração noMain
procedimento deClass1
:TcpChannel chan = new TcpChannel(8085); ChannelServices.RegisterChannel(chan);
Chame o
RegisterWellKnownType
método doRemotingConfiguration
objeto para registrar oServerClass
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 deSingleCall
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);
Use o
ReadLine
método doConsole
objeto para manter o aplicativo do servidor em execução.System.Console.WriteLine("Hit <enter> to exit..."); System.Console.ReadLine();
Crie seu projeto.
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.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários