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

Traduzione articoli Traduzione articoli
Identificativo articolo: 301112 - Visualizza i prodotti a cui si riferisce l?articolo.
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, vedere 307600 .
Espandi tutto | Chiudi tutto

In questa pagina

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 HelloServer. Nello stesso progetto, anche si definirÓ la classe che potrÓ venire passato dal client al server. Questa classe sarÓ richiamata ForwardMe. PerchÚ si desidera la classe ForwardMe il marshalling effettuato dal riferimento, la classe ForwardMe si deve ereditare da MarshalByRefObject.
  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 MarshalByRefObject. 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 MarshalByRefObject
    
    End Class
    Public Class ForwardMe
    	Inherits MarshalByRefObject
    
    End Class
    					
  5. Aggiungere che si Ŕ chiamato un metodo pubblico a HelloServer HelloMethod quello richiede un oggetto ForwardMe. UtilizzerÓ questo metodo per passare un oggetto ForwardMe al server. Questo metodo chiamerÓ il metodo CallMe 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 Sub
    End 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 Function
    
    End Class
    					
  7. Il progetto generare per creare l'assembly ServerClassRef.dll.
  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 System.Runtime.Remoting al progetto.
  5. Aggiungere un riferimento all'assembly ServerClassRef.dll creato nella sezione precedente.
  6. Utilizzare l'istruzione Imports sopra lo spazio Remoting, Remoting.Channels e Remoting.Channels.TCP 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.Remoting
    Imports System.Runtime.Remoting.Channels
    Imports System.Runtime.Remoting.Channels.TCP
    					
  7. Dichiarare che una variabile inizializza un oggetto TcpChannel 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 RegisterChannel. Aggiungere il codice di dichiarazione nella routine Main di Module1:
    Dim chan As TcpChannel = New TcpChannel(8085)
    ChannelServices.RegisterChannel(chan)
    					
  8. Registrare l'oggetto ServerClassRef con la struttura Remoting chiamando il metodo RegisterWellKnownType dell'oggetto RemotingConfiguration. ╚ 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 ServerClassRef 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 SingleCall o Singleton. In questo esempio si specifica SingleCall. 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 ReadLine dell'oggetto Console:
    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 System.Runtime.Remoting al progetto.
  5. Aggiungere un riferimento all'assembly ServerClassRef.dll che si creava in precedenza in questo documento.
  6. Utilizzare l'istruzione Imports sopra lo spazio Remoting, Remoting.Channels e Remoting.Channels.TCP 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.Remoting
    Imports System.Runtime.Remoting.Channels
    Imports System.Runtime.Remoting.Channels.TCP
    					
  7. Dichiarare che una variabile inizializza un oggetto TcpChannel che si utilizzerÓ il client per connettersi all'applicazione server. Necessario che specifichi la porta che inizializzi l'oggetto TcpChannel 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 RegisterChannel. Si deve inizializzare un nuovo oggetto ForwardMe 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 HelloServer utilizzando il metodo GetObject dell'oggetto Attivatore. ╚ 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.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 un'istanza dell'oggetto server si crea correttamente, Ŕ possibile chiamare il metodo dell'oggetto server passando nell'oggetto objForwardMe appena creato. Dovrebbe venire restituita la stringa modificata, che potrebbe essere utile visualizzare
    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. Mantenere l'applicazione client eseguito utilizzando il metodo ReadLine dell'oggetto Console:
    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 inglese
http://msdn.microsoft.com/library/en-us/cpqstart/html/cpsmpnetsamples-howtoremoting.asp
Servizio remoto Microsoft .NET: Una tecnica panoramica
http://msdn2.microsoft.com/en-us/library/ms973857.aspx
"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

ProprietÓ

Identificativo articolo: 301112 - Ultima modifica: lunedý 24 febbraio 2014 - Revisione: 5.5
Le informazioni in questo articolo si applicano a
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Chiavi:á
kbnosurvey kbarchive kbvs2005applies kbvs2005swept kbhowtomaster KB301112 KbMtit kbmt
Traduzione automatica articoli
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
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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