Come effettuare il marshalling di un oggetto a un server remoto per il riferimento utilizzando Visual Basic 2005 o Visual Basic .NET

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica. Nel caso in cui si riscontrino degli errori e si desideri inviare dei suggerimenti, è possibile completare il questionario riportato alla fine del presente articolo.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 301112
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
Per una versione di Microsoft Visual C # . NET di questo articolo, vedere307600.
Sommario
In questo articolo viene spiegato come effettuare il marshalling di un oggetto mediante riferimento a un server remoto Quando si effettua il marshalling di un oggetto per il riferimento, il runtime crea un proxy trasparente cosicché il server possa rendere le chiamate indietro all'oggetto sul client. Il solo elemento che viene inviato al server è il proxy, Che effettua il marshalling delle richiamate al client

Questo articolo si suddivide in tre parti il server oggetto, l'applicazione server e l'applicazione client. In questo articolo vengono approfonditi argomenti già trattati nei seguenti articoli della Microsoft Knowledge Base
300951 Come creare un server remoto utilizzando Visual Basic .NET
300943 Come creare l'accesso client al server remoto utilizzando Visual Basic .NET

Requisiti

L'hardware consigliato, il software, l'infrastruttura di rete e i Service Pack necessari elencati sono di seguito:
  • Microsoft Windows Server 2003, Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server o NT 4.0 Server Microsoft Windows
  • Microsoft Visual Studio 2005 o Microsoft Visual Studio .NET
In questo articolo si presume la conoscenza dei seguenti argomenti:
  • Visual Studio 2005 o Visual Studio .NET
  • Nozioni di base sulle ret

Creare un oggetto di server remoto passando gli oggetti

La prima operazione da compiere per creare un'applicazione server consiste nel creare l'oggetto server, Che viene istanziato e con cui l'applicazione client comunica sul computer server L'applicazione client esegue ciò tramite un oggetto proxy creato nel client. L'oggetto server risiederà in una libreria di classi (DLL) e si chiama . Nello stesso progetto, anche si definirà la classe che potrà venire passato dal client al server. Questa classe sarà richiamata . Perché si desidera la classe ForwardMe il marshalling effettuato dal riferimento, la classe ForwardMe si deve ereditare da .
  1. Avviare Visual Studio 2005 o Visual Studio .NET.
  2. Creare una nuova applicazione libreria di classi e denominarl ServerClassRef.
  3. Rinominare il file Class1.vb i ServerClassRef.vb.
  4. Aprire ServerClassRef.vb e aggiungere due classi denominate HelloServer E ForwardMe Entrambi ereditano da . HelloServer sarà la classe principale utilizzata dall'applicazione client, La classe ForwardMe si utilizzerà per inviare i dati di oggetto al server dal client. Si dovrebbe risultare quanto segue quale il file di codice ServerClassRef.vb:
    Public Class HelloServer	Inherits MarshalByRefObjectEnd ClassPublic Class ForwardMe	Inherits MarshalByRefObjectEnd Class					
  5. Aggiungere che si è chiamato un metodo pubblico a HelloServer HelloMethod quello richiede un oggetto . Utilizzerà questo metodo per passare un oggetto al server. Questo metodo chiamerà il metodo di quell'oggetto. La classe HelloServer dovrebbe essere ora analoga alla seguente
    Public Class HelloServer    Inherits MarshalByRefObject    Public Sub HelloMethod(ByRef obj As ForwardMe)        Dim i As Integer        obj.CallMe()    End SubEnd Class					
  6. Aggiungere un metodo pubblico alla classe ForwardMe Tale metodo assumerà un nome che rispecchia il processo in cui tale codice viene eseguito Perché si invia uno stub proxy al server e si effettua i callback appena al client (Marshal per il riferimento), il codice si eseguirà nel processo del client.
    Public Class ForwardMe    Inherits MarshalByRefObject    Public Function CallMe() As Object        Console.WriteLine("CallMe was executed in: " & _        Process.GetCurrentProcess.ProcessName.ToString)    End FunctionEnd Class					
  7. Il progetto generare per creare l'assembly .
  8. Chiudere e salvare il progetto

Creare un'applicazione di server remoto

Dopo aver creato l'oggetto server con cui comunicherà il client, è necessario registrare questo oggetto con la struttura Remoting. La registrazione non implica soltanto il registrare l'oggetto, ma anche l'avviare il server e fare in modo che sia in ascolto su una porta perché i client possano connettersi Allo scopo, un tipo di progetto che restituirà un file eseguibile è necessario. Il motivo per cui l'oggetto server è stato incluso in un oggetto separato è per potervi fare facilmente riferimento dal client Se lo si è incluso in questo progetto, non potrebbe fare riferimento a esso perché i riferimenti solo possono essere impostati sui file DLL.
  1. Avviare Visual Studio 2005 o Visual Studio .NET.
  2. Per ragioni di semplicità, creare una nuova applicazione console per avviare il server remoto e denominarl ServerObjectRef.
  3. Rinominare il file predefinito Module1.vb i ServerObjectRef.vb.
  4. Aggiungere un riferimento allo spazio al progetto.
  5. Aggiungere un riferimento all'assembly creato nella sezione precedente.
  6. Utilizzare l'istruzione Imports sopra lo spazio , e così non sarà necessario qualificare le dichiarazioni in quegli spazi più avanti nel codice. L'istruzione Imports deve essere utilizzata prima di qualunque altra dichiarazione
    Imports System.Runtime.RemotingImports System.Runtime.Remoting.ChannelsImports System.Runtime.Remoting.Channels.TCP					
  7. Dichiarare che una variabile inizializza un oggetto dell'attesa per che i client si connettano 8085 su alcuna porta in questo caso porta. Registrare il canale che si utilizzerà il client per comunicare con i servizi di canale utilizzando il metodo . Aggiungere il codice di dichiarazione nella routine Main di Module1:
    Dim chan As TcpChannel = New TcpChannel(8085)ChannelServices.RegisterChannel(chan)					
  8. Registrare l'oggetto con la struttura Remoting chiamando il metodo dell'oggetto . È necessario specificare le seguenti parti:
    1. Il nome completo del tipo di oggetto che si registra, in questo cas ServerClassRef.HelloServer, essere venire seguitato dal nome di assembly. Si specificano il nome dello spazio nonché il nome di classe. Dato che nella sezione precedente non è stato specificato uno spazio dei nomi, viene utilizzato lo spazio dei nomi principale predefinito
    2. È quindi necessario fornire il nome dell'endpoint in cui l'oggetto verrà pubblicato L'informazione relativa al nome è necessaria affinché il client possa connettersi all'oggetto Utilizzo RemoteTestRef.
    3. Il parametro finale specifica la modalità oggetta che può essere o . In questo esempio si specifica . La modalità dell'oggetto ne specifica la durata dopo l'attivazione sul server Nel caso degli oggetti SingleCall, viene creata una nuova istanza della classe per ogni chiamata effettuata da un client, anche se lo stesso client richiama più volte lo stesso metodo Gli oggetti Singleton vengono invece creati una sola volta e tutti i client comunicano con lo stesso oggetto
      RemotingConfiguration.RegisterWellKnownServiceType( _ Type.GetType("ServerClassRef.HelloServer, ServerClassRef"), _ "RemoteTestRef", _ WellKnownObjectMode.SingleCall)						
  9. Mantenere l'applicazione server eseguito utilizzando il metodo dell'oggetto :
    Console.WriteLine("Hit <enter> to exit...")Console.ReadLine()					
  10. Generare il progetto
  11. Chiudere e salvare il progetto

Creare un client a un server remoto passando gli oggetti

  1. Avviare Visual Studio 2005 o Visual Studio .NET.
  2. Creare una nuova applicazione console e denominarl ClientAppRef.
  3. Rinominare il file predefinito Module1.vb i ClientAppRef.vb.
  4. Aggiungere un riferimento allo spazio al progetto.
  5. Aggiungere un riferimento all'assembly che si creava in precedenza in questo documento.
  6. Utilizzare l'istruzione Imports sopra lo spazio , e così non sarà necessario qualificare le dichiarazioni in quegli spazi più avanti nel codice. L'istruzione Imports deve essere utilizzata prima di qualunque altra dichiarazione
    Imports System.Runtime.RemotingImports System.Runtime.Remoting.ChannelsImports System.Runtime.Remoting.Channels.TCP					
  7. Dichiarare che una variabile inizializza un oggetto che si utilizzerà il client per connettersi all'applicazione server. Necessario che specifichi la porta che inizializzi l'oggetto per consentire la comunicazione bidirezionale. Ciò è necessario perché si effettua il marshalling di un oggetto per il riferimento e sarà necessario che il server effettui i callback al client. Esso lo ferà utilizzando questa porta. La porta dovrà essere diversa da quella utilizzata per inviare dati Registrare il canale con i servizi di canale utilizzando il metodo . Si deve inizializzare un nuovo oggetto passato al server remoto nel secondo luogo. Aggiungere il codice di dichiarazione nella routine Main di Module1:
    Dim chan As TcpChannel = New TcpChannel(8086)ChannelServices.RegisterChannel(chan)Dim objForwardMe As New ServerClassRef.ForwardMe()					
  8. Ora, è possibile dichiarare e inizializzare il server remoto. In questo caso, creerà un'istanza dell'oggetto utilizzando il metodo dell'oggetto . È necessario specificare le seguenti parti:
    1. Il nome completo del tipo di oggetto che si registra, in questo cas ServerClassRef.HelloServer, essere venire seguitato dal nome di assembly ServerClassRef. Si specifica entrambi nome dello spazio nonché qui del nomeclasse. Dato che nella sezione precedente non è stato specificato uno spazio dei nomi, viene utilizzato lo spazio dei nomi principale predefinito
    2. L'identificatore di risorsa uniforme (URI) dell'oggetto che è necessario attivare. L'URI deve comprendere il protocollo (tcp), il nome di computer (localhost), la porta (8085) e l'endpoint del server oggetto (8085/RemoteTestRef). Utilizzare l'URI "tcp://localhost:8085/RemoteTestRef" per accedere al server remoto ServerClass
      Dim objHelloServer As ServerClassRef.HelloServerobjHelloServer = 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 stepEnd If						
  9. Se un'istanza dell'oggetto server si crea correttamente, è possibile chiamare il metodo dell'oggetto server passando nell'oggetto appena creato. Dovrebbe venire restituita la stringa modificata, che potrebbe essere utile visualizzare
    Dim objHelloServer As ServerClassRef.HelloServerobjHelloServer = 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. Mantenere l'applicazione client eseguito utilizzando il metodo dell'oggetto :
    Console.WriteLine("Hit <enter> to exit...")Console.ReadLine()					
  11. Generare il progetto
  12. Assicurare di eseguire l'applicazione server.
  13. Eseguire il progetto e verificare la comunicazione dal client al server Si visualizza l'output visualizzato nella finestra di console del client. Si marshalling così si effettuano i callback al client per il riferimento.
Riferimenti
Panoramica remota .NET (il manuale di sviluppatore .NET Framework)

"TcpChannel Class" nella documentazione .NET Framework Class Library (informazioni in lingua inglese

".NET Framework Samples - Remoting" (informazioni in lingua ingleseServizio remoto Microsoft .NET: Una tecnica panoramica"Activator.GetObject Method" nella documentazione .NET Framework Class Library (informazioni in lingua inglese

"Type.GetType Method" nella documentazione .NET Framework Class Library (informazioni in lingua inglese

"RegisterWellKnownServiceType Method" nella documentazione .NET Framework Class Library (informazioni in lingua inglese

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 301112 - Ultima revisione: 02/24/2014 12:49:17 - Revisione: 5.5

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbnosurvey kbarchive kbvs2005applies kbvs2005swept kbhowtomaster KB301112 KbMtit kbmt
Feedback