Como empacotar um objeto para um servidor remoto por referência usando o Visual Basic 2005 ou Visual Basic .NET

Traduções deste artigo Traduções deste artigo
ID do artigo: 301112 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Para obter uma Microsoft Visual translation from VPE for Csharp .NET versão deste artigo, consulte 307600.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo demonstra como empacotar um objeto por referência a um servidor remoto. Quando você empacotar um objeto por referência, o runtime cria um proxy transparente para que o servidor pode fazer chamadas para o objeto no cliente. A única coisa que é enviada para o servidor é o proxy. O proxy empacota faz a chamada para o cliente.

Este artigo é dividido em três partes: O objeto de servidor, o aplicativo de servidor e o aplicativo cliente. Expande nos seguintes artigos da Base de dados de Conhecimento Microsoft:
300951Como criar um servidor remoto usando o Visual Basic .NET
300943Como criar acesso do cliente ao servidor remoto usando o Visual Basic .NET

Requisitos

A lista a seguir descreve o hardware recomendado, software, infra-estrutura de rede e service packs que você precisa:
  • Microsoft Windows Server 2003, Microsoft 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 você esteja familiarizado com os seguintes tópicos:
  • O Visual Studio 2005 ou o Visual Studio .NET
  • Rede básica

Criar um objeto de servidor remoto passando objetos

A primeira etapa para criar o aplicativo do servidor é criar o objeto de servidor. O objeto de servidor é o que o aplicativo cliente instancia e se comunica com no computador servidor. O aplicativo cliente faz isso através de um objeto proxy criado no cliente. O objeto de servidor residirá em uma biblioteca de classe (DLL) e é chamado HelloServer . O mesmo projeto também você irá definir a classe que vai ser passados do cliente para o servidor. Essa classe será chamada ForwardMe . Como você deseja a classe ForwardMe para ser empacotado por referência, a classe ForwardMe deve herdar de MarshalByRefObject .
  1. Inicie o Visual Studio .NET ou Visual Studio 2005.
  2. Criar um novo aplicativo de biblioteca de classe e denomine ServerClassRef .
  3. Renomeie o arquivo Class1.vb como ServerClassRef.vb .
  4. Abra ServerClassRef.vb e adicione duas classes chamados HelloServer e ForwardMe que ambos herdam MarshalByRefObject . A classe HelloServer será a classe principal usada pelo aplicativo cliente. A classe ForwardMe será usada para enviar dados de objeto do cliente para o servidor. Seu arquivo de código ServerClassRef.vb deve parecer com o seguinte:
    Public Class HelloServer
    	Inherits MarshalByRefObject
    
    End Class
    Public Class ForwardMe
    	Inherits MarshalByRefObject
    
    End Class
    					
  5. Adicione um método público para HelloServer chamado HelloMethod que leva um objeto ForwardMe . Você usará esse método para passar um objeto ForwardMe para o servidor. Esse método irá chamar o método CallMe desse objeto. Sua classe HelloServer deve agora parecer com 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 para a classe ForwardMe. Esse método irá obter o nome do processo de onde esse código está sendo executado. Porque você está apenas enviando um stub de proxy para o servidor e fazer retornos de chamada para o cliente (marshaling 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 projeto para criar o assembly ServerClassRef.dll .
  8. Feche e salve o projeto.

Criar um aplicativo de servidor remoto

Agora que você criou o objeto de servidor que o cliente se comunicará com, você deve registrar esse objeto com a estrutura de remoting. Registrando não apenas envolve a registrar o objeto mas também inclui iniciando o servidor e fazendo com que escutar uma porta para clientes para se conectar. Para fazer isso, você precisa de um tipo de projeto que produzirá um arquivo executável. O motivo que você incluído o objeto de servidor em um projeto separado foi para que você pode facilmente referenciar o objeto de servidor do cliente. Se você incluiu neste projeto não pôde referência-lo porque referências só podem ser definidas como arquivos DLL.
  1. Inicie o Visual Studio .NET ou Visual Studio 2005.
  2. Para fins de simplicidade, crie um novo aplicativo de console para iniciar o servidor remoto e denomine ServerObjectRef .
  3. Renomeie o arquivo criado por padrão de Module1.vb para ServerObjectRef.vb .
  4. Adicione uma referência ao namespace System.Runtime.Remoting para o projeto.
  5. Adicione uma referência ao assembly ServerClassRef.dll que você criou na seção anterior.
  6. Use a declaração Imports nos namespaces Remoting , Remoting.Channels e Remoting.Channels.TCP portanto, não será necessário para qualificar declarações esses namespaces posteriormente no seu código. A declaração Imports deve ser usada antes para qualquer outra declaração:
    Imports System.Runtime.Remoting
    Imports System.Runtime.Remoting.Channels
    Imports System.Runtime.Remoting.Channels.TCP
    					
  7. Declare uma variável para inicializar um objeto TcpChannel que escutará os clientes se conectem em uma determinada porta, nesse caso a porta 8085. Registre o canal que o cliente usará para se comunicar com os serviços de canal usando o método RegisterChannel . Adicione o código declaração no procedimento principal no Module1:
    Dim chan As TcpChannel = New TcpChannel(8085)
    ChannelServices.RegisterChannel(chan)
    					
  8. Registrar o objeto ServerClassRef na estrutura do Remoting chamando o método RegisterWellKnownType do objeto RemotingConfiguration . Você deve especificar as seguintes partes:
    1. O nome completo do tipo de objeto que está sendo registrado, nesse caso ServerClassRef.HelloServer , seguido pelo nome do assembly, ServerClassRef . Especifique o nome do namespace bem como o nome da classe. Porque você não especificou um espaço para nome na seção anterior, o namespace de raiz padrão é usado.
    2. Em seguida, forneça o nome do ponto de extremidade onde o objeto será publicado. Clientes precisará saber esse nome para conectar-se ao objeto. Use RemoteTestRef .
    3. O parâmetro final especifica o modo de objeto, que pode ser SingleCall ou singleton . Este exemplo especifica SingleCall . O modo de objeto Especifica a vida útil do objeto quando ele está ativado no servidor. No caso de objetos SingleCall, uma nova instância da classe será criada para cada chamada é feita a partir de um cliente, mesmo se o mesmo cliente chama o método mesmo mais de uma vez. Singleton, por outro lado, são criados objetos apenas uma vez e todos os clientes se comunicar com o mesmo objeto:
      RemotingConfiguration.RegisterWellKnownServiceType( _
       Type.GetType("ServerClassRef.HelloServer, ServerClassRef"), _
       "RemoteTestRef", _
       WellKnownObjectMode.SingleCall)
      						
  9. Manter o aplicativo de servidor em execução usando o método ReadLine do objeto console :
    Console.WriteLine("Hit <enter> to exit...")
    Console.ReadLine()
    					
  10. Crie seu projeto.
  11. Feche e salve o projeto.

Criar um cliente a um servidor remoto passando objetos

  1. Inicie o Visual Studio .NET ou Visual Studio 2005.
  2. Crie um novo aplicativo de console e denomine ClientAppRef .
  3. Renomeie o arquivo criado por padrão de Module1.vb para ClientAppRef.vb .
  4. Adicione uma referência ao namespace System.Runtime.Remoting para o projeto.
  5. Adicione uma referência para o assembly ServerClassRef.dll que criada anteriormente neste documento.
  6. Use a declaração Imports nos namespaces Remoting , Remoting.Channels e Remoting.Channels.TCP portanto, não será necessário para qualificar declarações esses namespaces posteriormente no seu código. A declaração Imports deve ser usada antes para qualquer outra declaração:
    Imports System.Runtime.Remoting
    Imports System.Runtime.Remoting.Channels
    Imports System.Runtime.Remoting.Channels.TCP
    					
  7. Declare uma variável para inicializar um objeto TcpChannel que o cliente usará para se conectar ao aplicativo do servidor. Você deve especificar a porta ao inicializar o objeto TcpChannel para habilitar comunicação bidirecional. Isso é necessário porque você um objeto é de empacotamento por referência e o servidor precisará fazer retornos de chamada para o cliente. Ele fará isso usando esta porta. A porta deve ser diferente daquele que será usado para enviar dados. Registre o canal com os serviços de canal usando o método RegisterChannel . Em segundo lugar, você deve inicializar um novo objeto ForwardMe que será passado para o servidor remoto. Adicione o código declaração no procedimento principal no Module1:
    Dim chan As TcpChannel = New TcpChannel(8086)
    ChannelServices.RegisterChannel(chan)
    Dim objForwardMe As New ServerClassRef.ForwardMe()
    					
  8. Agora você pode declarar e criar uma instância do servidor remoto. Nesse caso, você irá instanciar o objeto HelloServer usando o método GetObject do objeto ativador . Você deve especificar as seguintes partes:
    1. O nome completo do tipo de objeto que está sendo registrado, nesse caso ServerClassRef.HelloServer , seguido pelo nome assembly ServerClassRef . Você deve especificar o nome do espaço para nome, bem como o classname aqui. Porque você não especificou um espaço para nome na seção anterior, o namespace de raiz padrão é usado.
    2. O identificador de recursos uniforme (URI) do objeto que você precisa ativar. O URI deve incluir o protocolo (tcp), o nome do computador (localhost), a porta (8085) e o ponto de extremidade do objeto de servidor (RemoteTestRef). Usar o URI "tcp: / / localhost:8085 / RemoteTestRef" para acessar o 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 objeto de servidor é instanciado com êxito, você pode chamar método do objeto servidor, passando no objeto recém-criado objForwardMe . A seqüência modificada deve retornar como resultado, portanto, você irá querer exibir 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 o aplicativo de cliente em execução usando o método ReadLine do objeto console :
    Console.WriteLine("Hit <enter> to exit...")
    Console.ReadLine()
    					
  11. Crie seu projeto.
  12. Verifique se que o aplicativo do servidor está em execução.
  13. Executar o projeto e testar a comunicação de cliente para servidor. Você verá a saída exibida na janela do console do cliente. Empacotamento por referência, portanto, retornos de chamada são feitos para o cliente.

Referências

Visão geral do sistema de interação remota .NET (guia do desenvolvedor do .NET Framework)

Classe TcpChannel (biblioteca de classes do .NET Framework)

Exemplos do .NET framework - Remoting
http://msdn.microsoft.com/en-us/library/kwdt6w2k(VS.80).aspx
Microsoft .NET remoting: Um Technical Overview
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

ID do artigo: 301112 - Última revisão: segunda-feira, 24 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 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: 301112

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