Como organizar um objecto a um servidor remoto por referência utilizando o Visual Basic 2005 ou o Visual Basic .NET

Traduções de Artigos Traduções de Artigos
Artigo: 301112 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Para obter uma Microsoft Visual C# .NET versão deste artigo, consulte 307600.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo demonstra como organizar um objecto por referência a um servidor remoto. Quando é empacotar referências de um objecto por referência, o tempo de execução cria um proxy transparente que o servidor pode fazer chamadas para o objecto no cliente. A única coisa é enviada para o servidor for o proxy. O proxy marshals a efectua a chamada de segurança para o cliente.

Este artigo está dividido em três partes: O objecto de servidor, a aplicação de servidor e a aplicação cliente. Expande-se nos seguintes artigos da base de dados de conhecimento da Microsoft:
300951Como criar um servidor remoto utilizando o Visual Basic .NET
300943Como criar o acesso de cliente ao servidor remoto utilizando o Visual Basic .NET

Requisitos

A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs que necessita:
  • Microsoft Windows Server 2003, Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server, ou Microsoft Windows NT 4.0 Server
  • Microsoft Visual Studio 2005 ou o Microsoft Visual Studio .NET
Este artigo pressupõe que está familiarizado com os seguintes tópicos:
  • Visual Studio 2005 ou o Visual Studio .NET
  • Funcionamento em rede básico

Criar um objecto servidor remoto, passando objectos

O primeiro passo para criar a aplicação de servidor é criar o objecto de servidor. O objecto de servidor é o que a aplicação cliente instancia e comunica com no computador servidor. A aplicação cliente efectua este procedimento através de um objecto de proxy criado no cliente. O objecto de servidor irá residir numa biblioteca de classe (DLL) e é denominado HelloServer . No mesmo projecto também irá definir a classe que vai ser passadas de cliente ao servidor. Esta classe será chamada ForwardMe . Porque pretende que a classe ForwardMe possível empacotar as referências por referência, a classe ForwardMe tem herdada de MarshalByRefObject .
  1. Inicie o Visual Studio .NET ou o Visual Studio 2005.
  2. Criar uma nova aplicação de biblioteca de classe e nome ServerClassRef .
  3. Mude o nome do ficheiro Class1.vb como ServerClassRef.vb .
  4. Abra ServerClassRef.vb e adicione duas classes denominadas HelloServer e ForwardMe que ambos herdam de MarshalByRefObject . A classe HelloServer será a classe principal utilizada pela aplicação cliente. A classe ForwardMe será utilizada para enviar dados do objecto a partir do cliente para o servidor. O ficheiro de código ServerClassRef.vb deverá assemelhar-se o seguinte:
    Public Class HelloServer
    	Inherits MarshalByRefObject
    
    End Class
    Public Class ForwardMe
    	Inherits MarshalByRefObject
    
    End Class
    					
  5. Adicione um método público HelloServer chamado HelloMethod que utiliza um objecto ForwardMe . Vai utilizar este método para transmitir um objecto ForwardMe para o servidor. Este método vai chamar o método CallMe desse objecto. A classe HelloServer agora deverá assemelhar-se o seguinte:
    Public Class HelloServer
        Inherits MarshalByRefObject
    
        Public Sub HelloMethod(ByRef obj As ForwardMe)
            Dim i As Integer
            obj.CallMe()
        End Sub
    End Class
    					
  6. Adicione um método público à classe ForwardMe. Este método irá obter o nome do processo de onde está a ser executado este código. Uma vez que apenas está a enviar um stub de proxy para o servidor e efectuar chamadas de retorno para o cliente (empacotamento por referência), o código será executado no processo do cliente.
    Public Class ForwardMe
        Inherits MarshalByRefObject
    
        Public Function CallMe() As Object
            Console.WriteLine("CallMe was executed in: " & _
            Process.GetCurrentProcess.ProcessName.ToString)
        End Function
    
    End Class
    					
  7. Crie o projecto para criar a assemblagem ServerClassRef.dll .
  8. Feche e guarde o projecto.

Criar uma aplicação de servidor remoto

Agora que criou o objecto de servidor que o cliente irá comunicar com, terá de registar este objecto com a estrutura Remoting. Registar não só envolve a registar o objecto mas também inclui iniciar o servidor e ter-escutar numa porta aos clientes a ligação. Para efectuar este procedimento, necessita de um tipo de projecto que irá exportar um ficheiro executável. A razão que incluídos no objecto de servidor no projecto separado foi poder facilmente poderia referenciar o objecto de servidor do cliente. Se tiver incluído neste projecto não a pode referenciar uma vez que só podem ser definidas referências aos ficheiros DLL.
  1. Inicie o Visual Studio .NET ou o Visual Studio 2005.
  2. Para Deus de uma questão de simplicidade, criar uma nova aplicação de consola para iniciar o servidor remoto e o nome ServerObjectRef .
  3. Mude o nome do ficheiro criado por predefinição de Module1.vb para ServerObjectRef.vb .
  4. Adicione uma referência ao espaço de nomes System.Runtime.Remoting ao projecto.
  5. Adicione uma referência à assemblagem ServerClassRef.dll que criou na secção anterior.
  6. Utilize a instrução importações sobre espaços de nomes Remoting Remoting.Channels e Remoting.Channels.TCP para que não será pedido para qualificar declarações os espaços de nomes mais tarde no código. Deve ser utilizada a instrução de importação antes para outras declarações:
    Imports System.Runtime.Remoting
    Imports System.Runtime.Remoting.Channels
    Imports System.Runtime.Remoting.Channels.TCP
    					
  7. Declare uma variável para inicializar um objecto de TcpChannel escutará aos clientes a ligação numa determinada porta, neste caso porta 8085. Registe o canal que o cliente irá utilizar para comunicar com os serviços de canal, utilizando o método RegisterChannel . Adicione o código declaração no procedimento principal em Module1:
    Dim chan As TcpChannel = New TcpChannel(8085)
    ChannelServices.RegisterChannel(chan)
    					
  8. Registe o objecto ServerClassRef com a estrutura Remoting chamando o método RegisterWellKnownType do objecto RemotingConfiguration . Tem de especificar as seguintes partes:
    1. O tipo de total nome do objecto a ser registado, neste caso ServerClassRef.HelloServer , seguido do nome da assemblagem, ServerClassRef . Tem de especificar o nome do espaço de nomes, bem como o nome da classe. Uma vez que não especificou um espaço de nomes na secção anterior, o espaço de nomes de raiz predefinido é utilizado.
    2. Em seguida, forneça o nome do ponto final onde o objecto vai ser publicado. Clientes necessitam de saber este nome para ligar ao objecto. Utilize RemoteTestRef .
    3. O parâmetro final Especifica o modo de objecto, que pode ser SingleCall ou singleton . Neste exemplo especifica SingleCall . O modo de objecto Especifica a duração do objecto quando está activada no servidor. No caso de objectos de SingleCall uma nova instância da classe será criada para cada chamada é efectuada a partir de um cliente, mesmo se o mesmo cliente chama o método mesmo mais do que uma vez. Singleton, por outro lado, são criados objectos apenas uma vez e comunicam todos os clientes com o mesmo objecto:
      RemotingConfiguration.RegisterWellKnownServiceType( _
       Type.GetType("ServerClassRef.HelloServer, ServerClassRef"), _
       "RemoteTestRef", _
       WellKnownObjectMode.SingleCall)
      						
  9. Manter a aplicação de servidor executar utilizando o método ReadLine do objecto da consola :
    Console.WriteLine("Hit <enter> to exit...")
    Console.ReadLine()
    					
  10. Crie o projecto.
  11. Feche e guarde o projecto.

Criar um cliente a um servidor remoto, passando objectos

  1. Inicie o Visual Studio .NET ou o Visual Studio 2005.
  2. Criar uma nova aplicação de consola e o nome ClientAppRef .
  3. Mude o nome do ficheiro criado por predefinição de Module1.vb para ClientAppRef.vb .
  4. Adicione uma referência ao espaço de nomes System.Runtime.Remoting ao projecto.
  5. Adicione uma referência à assemblagem ServerClassRef.dll que foi criado anteriormente neste documento.
  6. Utilize a instrução importações sobre espaços de nomes Remoting Remoting.Channels e Remoting.Channels.TCP para que não será pedido para qualificar declarações os espaços de nomes mais tarde no código. Deve ser utilizada a instrução de importação antes para outras declarações:
    Imports System.Runtime.Remoting
    Imports System.Runtime.Remoting.Channels
    Imports System.Runtime.Remoting.Channels.TCP
    					
  7. Declare uma variável para iniciar um objecto TcpChannel que o cliente irá utilizar para estabelecer ligação com a aplicação de servidor. Tem de especificar a porta ao inicializar o objecto TcpChannel para activar a comunicação bidireccional. Isto é necessário porque são a autenticação um objecto por referência e o servidor terá de efectuar chamadas de retorno do cliente. Este irá fazê-lo utilizando esta porta. A porta deve ser diferente do que será utilizada para enviar dados. Registe o canal com os serviços de canal, utilizando o método RegisterChannel . Em segundo lugar, tem de inicializar um novo objecto ForwardMe que será passado para o servidor remoto. Adicione o código declaração no procedimento principal em Module1:
    Dim chan As TcpChannel = New TcpChannel(8086)
    ChannelServices.RegisterChannel(chan)
    Dim objForwardMe As New ServerClassRef.ForwardMe()
    					
  8. Agora pode declarar e criar uma instância do servidor remoto. Neste caso, irá instanciar o objecto HelloServer utilizando o método GetObject do objeto Activator . Tem de especificar as seguintes partes:
    1. O tipo de total nome do objecto a ser registado, neste caso ServerClassRef.HelloServer , seguido do nome da assemblagem ServerClassRef . Tem de especificar o nome do espaço de nomes, bem como classname aqui. Uma vez que não especificou um espaço de nomes na secção anterior, o espaço de nomes de raiz predefinido é utilizado.
    2. Uniform resource identifier (URI) do objecto que é necessário activar. O URI tem incluem o protocolo (tcp), o nome do computador (localhost), a porta (8085) e o ponto final do objecto de servidor (RemoteTestRef). Utilize o URI "tcp: / / localhost:8085 / RemoteTestRef" para aceder ao servidor remoto ServerClass.
      Dim objHelloServer As ServerClassRef.HelloServer
      
      objHelloServer = CType(Activator.GetObject( _
          Type.GetType("ServerClassRef.HelloServer, ServerClassRef"), _
          "tcp://localhost:8085/RemoteTestRef"), _
          ServerClassRef.HelloServer)
      If objHelloServer Is Nothing Then
          Console.WriteLine("Could not locate server")
      Else
          'See next step
      End If
      						
  9. Se o objecto de servidor é instanciado com êxito, é possível chamar método do objecto de servidor, passar no objecto recém-criado objForwardMe . A cadeia de modificação deverá devolver como resultado, pelo que irá mostrar que:
    Dim objHelloServer As ServerClassRef.HelloServer
    
    objHelloServer = CType(Activator.GetObject( _
    	Type.GetType("ServerClassRef.HelloServer, ServerClassRef"), _
    	"tcp://localhost:8085/RemoteTestRef"), _
    	ServerClassRef.HelloServer)
    If objHelloServer Is Nothing Then
    	Console.WriteLine("Could not locate server")
    Else
    	objHelloServer.HelloMethod(objForwardMe)
    End If
    					
  10. Manter a aplicação cliente executar utilizando o método ReadLine do objecto da consola :
    Console.WriteLine("Hit <enter> to exit...")
    Console.ReadLine()
    					
  11. Crie o projecto.
  12. Certifique-se que a aplicação de servidor está em execução.
  13. Execute o projecto e testar a comunicação de cliente para servidor. Deverá ver o resultado apresentado na janela da consola do cliente. São empacotamento por referência, pelo que são efectuadas chamadas de retorno para o cliente.

Referências

Descrição geral do sistema de interacção remota .NET (Guia para programadores do .NET Framework)

Classe TcpChannel (biblioteca de classes do .NET Framework)

.NET framework exemplos - Remoting
http://msdn.microsoft.com/en-us/library/kwdt6w2k(VS.80).aspx
Microsoft .NET remoto: Uma descrição geral técnica
http://msdn2.microsoft.com/en-us/library/ms973857.aspx
Método Activator.GetObject (biblioteca de classes do .NET Framework)

Método Type.GetType (biblioteca de classes do .NET Framework)

Método RegisterWellKnownServiceType (biblioteca de classes do .NET Framework)

Propriedades

Artigo: 301112 - Última revisão: 26 de fevereiro de 2014 - Revisão: 5.6
A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Palavras-chave: 
kbnosurvey kbarchive kbmt kbvs2005applies kbvs2005swept kbhowtomaster KB301112 KbMtpt
Traduçã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: 301112

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com