Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.RemotingSystem.Runtime.Remoting.ChannelsSystem.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.
Crie um novo aplicativo de Biblioteca de Classes no Visual C# .NET. Nomeie o projeto ServerClass. Class1 é criado por padrão.
No 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
MarshalByRefObjectclasse. 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 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; } }Crie o projeto para criar a ServerClass.dll montagem.
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.
Crie um novo aplicativo de console no Visual C# .NET para iniciar o servidor remoto. Class1 é criado por padrão.
No Gerenciador de Soluções, renomeie o arquivo Class1.cs para RemoteServer.cs.
Adicione uma referência ao
System.Runtime.Remotingnamespace.Adicione uma referência ao assembly ServerClass.dll que você criou na seção anterior.
Use a
usinginstrução nosRemotingnamespaces ,Remoting.ChannelseRemoting.Channels.TCPpara que você não precise qualificar declarações nesses namespaces posteriormente em seu código. Você deve usar ausinginstruçã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
TcpChannelobjeto que escuta os clientes para se conectarem em uma determinada porta, que é a porta 8085 neste exemplo. Use oRegisterChannelmétodo para registrar o canal com os serviços do canal. Adicione o seguinte código de declaração noMainprocedimento deClass1:TcpChannel chan = new TcpChannel(8085); ChannelServices.RegisterChannel(chan);Chame o
RegisterWellKnownTypemétodo doRemotingConfigurationobjeto para registrar oServerClassobjeto 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
SingleCallobjeto para especificar o parâmetro final. O modo de objeto especifica o tempo de vida do objeto quando ele é ativado no servidor. No caso deSingleCallobjetos, 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,Singletonos 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
ReadLineConsolemétodo do objeto para manter o aplicativo de servidor em execução.System.Console.WriteLine("Hit <enter> to exit..."); System.Console.ReadLine();Compile o projeto.
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.