Artigo: 818780 - Última revisão: terça-feira, 28 de Agosto de 2007 - Revisão: 3.5

Como criar um servidor remoto utilizando 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 | Reduzir tudo

Sumário

Este artigo passo a passo descreve como criar um servidor remoto, simples que pode aceder a outra aplicação. A aplicação que acede ao servidor pode ser localizada no mesmo computador, num computador diferente ou numa rede diferente. O servidor remoto está dividido em duas partes:
  • Objecto de servidor
  • Aplicação de servidor
O objecto de servidor é o objecto que o cliente comunicar com e a aplicação de servidor é utilizada para registar o objecto de servidor com o sistema de interacção remota .NET Framework.


Mais Informação

Requisitos

A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs, terá de:
  • Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005
  • O Microsoft .NET Framework
Este artigo pressupõe que está familiarizado com os seguintes tópicos:
  • Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005
  • Microsoft Visual C++ .NET ou Microsoft Visual C++ 2005
  • Funcionamento em rede

Criar o objecto de servidor remoto

Para criar a aplicação de servidor, tem de criar um objecto de servidor. O objecto de servidor é o que a aplicação cliente instancia e, em seguida, utiliza para comunicar com o computador servidor. A aplicação cliente efectua este procedimento através de um objecto de proxy que é criado no cliente. Neste exemplo, o objecto de servidor reside uma biblioteca de classe (.dll) e chama myRemoteClass.
  1. Crie uma nova Managed C++ biblioteca de classes no Visual C++ .NET ou no Visual C++ 2005. Nome do projecto ServerClass . Por predefinição, é criado Aula1.
  2. Abra ServerClass.h e, em seguida, mude o nome Aula1 para myRemoteClass .

    O nome myRemoteClass tem herda da classe MarshalByRefObject . A classe aparece agora como se segue:
    namespace ServerClass
    {
      public __gc class myRemoteClass: public MarshalByRefObject
      {
        public:
        myRemoteClass()
        {
        }
      };
    }
    
    NOTA: tem de adicionar o common language runtime suportam a opção do compilador (/ clr:oldSyntax) no Visual C++ 2005 a compilação com êxito o anterior exemplo de código. Para adicionar a opção de compilador do suporte de tempo de execução idioma comum no Visual C++ 2005, siga estes passos:
    1. Clique em Project e, em seguida, clique em <ProjectName> propriedades .

      Nota <ProjectName> é um marcador de posição para o nome do projecto.
    2. Expanda Propriedades de configuração e, em seguida, clique em Geral .
    3. Clique para seleccionar Runtime do idioma comum suporte, sintaxe antigo (/ clr:oldSyntax) na definição de projecto Common Language Runtime suporte no painel da direita, clique em Aplicar e, em seguida, clique em OK .
    Para obter mais informações sobre o common language runtime suporte a opção do compilador, visite o seguinte Web site da Microsoft:
    / clr (Common Language Runtime compilação)
    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 à myRemoteClass que tem uma cadeia, apresenta uma mensagem de consola com um valor da cadeia e, em seguida, devolve Verdadeiro se a cadeia não está vazia.
    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 projecto para criar a assemblagem ServerClass.dll.
  5. Guarde e feche o projecto.

Criar a aplicação de servidor remoto

Depois de criar o objecto de servidor que o cliente comunicar com, registe este objecto com o sistema de interacção remota .NET Framework. Quando registar o objecto, deve também iniciar o servidor e certifique-se de que o servidor escuta numa porta aos clientes a ligação a essa porta. Para efectuar este procedimento, tem de utilizar um tipo de projecto que produz um ficheiro executável.

Incluir o objecto de servidor num projecto separado para que pode consultar facilmente o objecto de servidor do projecto cliente. Se incluir o objecto de servidor neste projecto, não é possível consulte porque referências só podem ser definidas para ficheiros .dll.
  1. Crie um novo projecto de consola de aplicação no Visual C++ .NET ou uma aplicação de consola de CLR nova, no Visual C++ 2005 para iniciar o servidor remoto. Nome do projecto ServerObjectRef .
  2. Abra o ficheiro de código ServerObjectRef.cpp. Utilize o seguinte código para adicionar uma referência para o espaço de nomes do sistema e o espaço de nomes System.Runtime.Remoting ao projecto:
    #using <System.Dll>
    #using <System.Runtime.Remoting.Dll>
  3. Utilize o seguinte código para adicionar uma referência à assemblagem ServerClass.dll que criou na secção anterior:
    #using <ServerClass.dll>
    Nota para especificar o caminho de procura de assemblagem, siga estes passos:
    1. Abra a caixa de diálogo Páginas de propriedades do projecto.
    2. Abra a pasta C/C ++ .
    3. Clique no separador Geral .
    4. Modifica a propriedade resolver # utilizar referências para a pasta em que a assemblagem ServerClass.dll existe.
  4. Utilize a instrução USING no espaço de nomes Remoting , o espaço de nomes Remoting.Channels e o espaço de nomes Remoting.Channels.TCP para que não é necessário que qualificar declarações os espaços de nomes mais tarde no código. Tem de utilizar a instrução USING antes de quaisquer outras 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 adequada. Declarar e, em seguida, iniciar um objecto TcpChannel que recebe aos clientes a ligação numa determinada porta. Neste exemplo, é porta 8085. Utilize o método RegisterChannel para registar o canal com os serviços de canal. Adicione o seguinte código de declaração a função principal :
    TcpChannel* chan = new TcpChannel(8085);
    ChannelServices::RegisterChannel(chan);
    
  6. Chame o método RegisterWellKnownServiceType do objecto RemotingConfiguration a registar o objecto ServerClass com o sistema de interacção remota .NET Framework. Especificar os parâmetros seguintes:
    • Especificar o tipo de objecto que está registado como um tipo conhecido. Neste exemplo, a palavra-chave __typeof é utilizada para obter o tipo de ServerClass.myRemoteClass .
    • Nome do ponto final onde o objecto será publicado como RemoteTest . Os clientes tem de saber este nome para ligar o objecto.
    • Utilize o modo de objecto SingleCall para especificar o parâmetro final. O modo de objecto Especifica a duração do objecto quando está activada no servidor. Quando um objecto SingleCall é utilizado, é criada uma nova instância da classe para cada chamada que um cliente faz, mesmo se o mesmo cliente chama o método mesmo mais do que uma vez. Por outro lado, singleton objectos são criados apenas uma vez e comunicam todos os clientes com o mesmo objecto.
      Type * objType = __typeof(ServerClass);
      RemotingConfiguration::RegisterWellKnownServiceType( objType, 
      	"RemoteTest", 
      	WellKnownObjectMode::SingleCall);
      
  7. Utilize o método ReadLine do objecto da consola para manter a execução de aplicações de servidor.
    System::Console::WriteLine("Hit <enter> to exit...");
    System::Console::ReadLine();
    
  8. Crie o projecto.
  9. Guarde e feche o projecto.

Testar o objecto de servidor

Para obter informações adicionais sobre como criar uma aplicação de cliente que comunica com o objecto de servidor que acabou criado, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
818781  (http://support.microsoft.com/kb/818781/ ) COMO: Criar o acesso de cliente a um servidor remoto utilizando o Visual C++ .NET

Referências

Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
818062  (http://support.microsoft.com/kb/818062/ ) COMO: Organizar um objecto a um servidor remoto por referência utilizando o Visual C++. NET
Para obter informações adicionais sobre a classe TCPChannel e o método RegisterWellKnownServiceType , visite os seguintes Web 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 adicionar informações sobre iniciações rápidos, visite o seguinte Web site da Microsoft:
Microsoft .NET framework SDK Iniciação rápida ao iniciações
http://quickstarts.asp.net/QuickStartv20/default.aspx (http://quickstarts.asp.net/QuickStartv20/default.aspx)
Para obter informações adicionais sobre Remoting, consulte o Microsoft .NET ' s Guide documentação Framework Developer.


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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )