ID do artigo: 818780 - Última revisão: terça-feira, 28 de agosto de 2007 - Revisão: 3.5

Como criar um servidor remoto usando o Visual C++ .NET ou Visual C++ 2005

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sumário

Este artigo passo a passo descreve como criar um servidor remoto simples que outro aplicativo pode acessar. O aplicativo que acessa o servidor pode ser localizado no mesmo computador, em um computador diferente ou em uma rede diferente. O servidor remoto é dividido em duas partes:
  • Objeto de servidor
  • Aplicativo de servidor
O objeto de servidor é o objeto que o cliente se comunica com e o aplicativo do servidor é usado para registrar o objeto de servidor com o .NET Framework remoting.


Mais Informações

Requisitos

A lista a seguir descreve o hardware recomendado, software, infra-estrutura de rede e service packs que será necessário:
  • Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005
  • O Microsoft .NET Framework
Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:
  • Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005
  • Microsoft Visual C++ .NET ou Microsoft Visual C++ 2005
  • Rede

Criar o objeto de servidor remoto

Para criar o aplicativo do servidor, você deve primeiro criar um objeto de servidor. O objeto de servidor é o que o aplicativo cliente instancia e usa para se comunicar com o computador servidor. O aplicativo cliente faz isso por meio de um objeto de proxy que é criado no cliente. Neste exemplo, o objeto de servidor reside em uma biblioteca de classes (.dll) e é denominado myRemoteClass.
  1. Crie um novo gerenciado C++ Class Library em Visual C++ .NET ou em Visual C++ 2005. Nomeie o projeto ServerClass . Por padrão, Class1 é criado.
  2. Abra ServerClass.h e, em seguida, renomeie Class1 para myRemoteClass .

    O renomeado myRemoteClass deve herdar da classe MarshalByRefObject . Sua classe agora aparece da seguinte maneira:
    namespace ServerClass
    {
      public __gc class myRemoteClass: public MarshalByRefObject
      {
        public:
        myRemoteClass()
        {
        }
      };
    }
    
    Observação você deve adicionar o common language runtime oferecem suporte a compilador opção (/ CLR: oldSyntax) no Visual C++ 2005 a compilar com êxito o exemplo de código anterior. Para adicionar a opção de compilador de suporte de tempo de execução idioma comum no Visual C++ 2005, siga estas etapas:
    1. Clique em Project e clique em <ProjectName> propriedades .

      Observação <ProjectName> é um espaço reservado para o nome do projeto.
    2. Expanda Configuration Properties e, em seguida, clique em Geral .
    3. Clique para selecionar Common Language Runtime suporte, sintaxe antiga (/ CLR: oldSyntax) no projeto oferece suporte a Common Language Runtime configuração no painel à direita, clique em Aplicar e em seguida, clique em OK .
    Para obter mais informações sobre o common language runtime oferece suporte à opção do compilador, visite o seguinte site da Microsoft:
    / clr (Common Language Runtime Compilation)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx (http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx)
  3. Adicionar um método público para myRemoteClass que leva uma seqüência de caracteres, exibe uma mensagem para o console com um valor da seqüência de caracteres e, em seguida, retorna True se a seqüência de caracteres não está vazia. bool
    bool SetString(String* sTemp)
    {
      try
      {
        Console::WriteLine("This string '{0}' has a length of {1}", sTemp, (sTemp->get_Length()).ToString());
        return (sTemp->get_Length() != 0? true:false) ;
      }
      catch(Exception* ex)
      {
        Console::WriteLine(ex->Message);
        return false;
      }
    }
    
  4. Crie o projeto para criar o assembly ServerClass.dll.
  5. Salve e feche o projeto.

Criar o aplicativo de servidor remoto

Depois de criar o objeto de servidor que o cliente se comunica com, registre esse objeto com o .NET Framework remoting. Quando você registra o objeto, você deve também iniciar o servidor e certifique-se de que o servidor escuta em uma porta para clientes se conectem a essa porta. Para fazer isso, você deve usar um tipo de projeto que gera um arquivo executável.

Incluir o objeto de servidor em um projeto separado para que você pode facilmente consultar o objeto de servidor do projeto cliente. Se você incluir o objeto de servidor neste projeto, você não pode fazer referência porque referências só podem ser definidas como arquivos .dll.
  1. Crie um novo projeto Console Application no Visual C++ .NET ou um novo aplicativo de console de CLR no Visual C++ 2005 para iniciar o servidor remoto. Nomeie o projeto ServerObjectRef .
  2. Abra o arquivo de código ServerObjectRef.cpp. Use o código a seguir para adicionar uma referência ao namespace System e o namespace System.Runtime.Remoting para o projeto:
    #using <System.Dll>
    #using <System.Runtime.Remoting.Dll>
  3. Use o seguinte código para adicionar uma referência ao assembly ServerClass.dll que você criou na seção anterior:
    #using <ServerClass.dll>
    Observação para especificar o caminho de pesquisa de assembly, execute estas etapas:
    1. Abra a caixa de diálogo Property Pages do projeto.
    2. Abra a pasta C/C ++ .
    3. Clique na guia Geral .
    4. Modifique a propriedade resolver # using referências para a pasta onde o assembly ServerClass.dll existe.
  4. Use a instrução USING no namespace de Remoting , o namespace Remoting.Channels e o espaço para nome Remoting.Channels.TCP para que você não tem que qualificar declarações esses namespaces posteriormente no seu código. Você deve usar a instrução USING antes de qualquer outro declarações.
    using namespace System::Runtime;
    using namespace System::Runtime::Remoting;
    using namespace System::Runtime::Remoting::Channels;
    using namespace System::Runtime::Remoting::Channels::Tcp;
    
  5. Declare a variável apropriada. Declarar e, em seguida, inicializar um objeto TcpChannel que escuta clientes conectem-se em uma determinada porta. Neste exemplo, ele é porta 8085. Use o método RegisterChannel para registrar o canal com os serviços de canal. Adicione o seguinte código declaração na função principal :
    TcpChannel* chan = new TcpChannel(8085);
    ChannelServices::RegisterChannel(chan);
    
  6. Chame o método RegisterWellKnownServiceType do objeto RemotingConfiguration para registrar o objeto ServerClass com o .NET Framework remoting. Especificar os seguintes parâmetros:
    • Especifique o tipo do objeto que está registrado como um tipo conhecido. Neste exemplo, a palavra-chave __typeof é usada para obter o tipo de ServerClass.myRemoteClass .
    • Nome da empresa onde o objeto será publicado como RemoteTest . Clientes devem saber esse nome para se conectar ao objeto.
    • Use o modo de objeto SingleCall para especificar o parâmetro final. O modo de objeto Especifica a vida útil do objeto quando ele está ativado no servidor. Quando um objeto SingleCall é usado, uma nova instância da classe é criada para cada chamada um cliente faz, mesmo se o mesmo cliente chama o método mesmo mais de uma vez. Por outro lado, singleton objetos são criados somente uma vez, e todos os clientes se comunicar com o mesmo objeto.
      Type * objType = __typeof(ServerClass);
      RemotingConfiguration::RegisterWellKnownServiceType( objType, 
      	"RemoteTest", 
      	WellKnownObjectMode::SingleCall);
      
  7. Use o método ReadLine do objeto console para manter o aplicativo de servidor em execução.
    System::Console::WriteLine("Hit <enter> to exit...");
    System::Console::ReadLine();
    
  8. Crie seu projeto.
  9. Salve e feche o projeto.

Teste o objeto de servidor

Para obter informações adicionais sobre como criar um aplicativo cliente que se comunica com o objeto de servidor que você acabou criado, clique no seguinte número de artigo para ler o artigo na Base de dados de Conhecimento da Microsoft:
818781  (http://support.microsoft.com/kb/818781/ ) COMO: Criar acesso de cliente para um servidor remoto usando o Visual C++ .NET

Referências

Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
818062  (http://support.microsoft.com/kb/818062/ ) COMO: Empacotar um objeto para um servidor remoto por referência usando o Visual C++ .NET
Para informações adicionais sobre a classe TCPChannel e o método RegisterWellKnownServiceType , visite os seguintes sites da MSDN:
Classe TcpChannel
http://msdn2.microsoft.com/en-us/library/system.runtime.remoting.channels.tcp.tcpchannel(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.runtime.remoting.channels.tcp.tcpchannel(vs.71).aspx)
Método RemotingConfiguration.RegisterWellKnownServiceType
http://msdn2.microsoft.com/en-us/library/system.runtime.remoting.remotingconfiguration.registerwellknownservicetype(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.runtime.remoting.remotingconfiguration.registerwellknownservicetype(vs.71).aspx)

Para adição informações sobre os tutoriais de início rápido, visite o seguinte site:
Tutoriais de início rápido do Microsoft .NET framework SDK
http://quickstarts.asp.net/QuickStartv20/default.aspx (http://quickstarts.asp.net/QuickStartv20/default.aspx)
Para obter informações adicionais sobre o sistema de interação remota, consulte o Microsoft .NET documentação do guia do desenvolvedor do Framework.


A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
Palavras-chave: 
kbmt kbtunneling kbchannels kbhowtomaster kbhowto KB818780 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 818780  (http://support.microsoft.com/kb/818780/en-us/ )