Procedura: Compilare un'applicazione host

Di per sé, la classe RemotableType definita nell'argomento Procedura: compilare un tipo utilizzabile in remoto non ha niente di speciale. Per consentire a oggetti presenti in altri domini applicazione di creare istanze di questo oggetto in modalità remota è necessario creare un host o un'applicazione listener che esegua le operazioni seguenti:

  • Scegliere e registrare un canale, che è un oggetto che gestisce i protocolli di rete e i formati di serializzazione per conto dell'utente.

  • Registrare il tipo con il sistema .NET Remoting così che possa utilizzare il canale per attendere le richieste per il tipo.

Tre canali predefiniti, HttpChannel (che utilizza la formattazione SOAP per impostazione predefinita), TcpChannel (che utilizza la formattazione binaria per impostazione predefinita) e IpcChannel (che utilizza la formattazione binaria per impostazione predefinita) sono inclusi in .NET Framework. HttpChannel può essere utilizzato tramite firewall senza aprire una porta e supporta protezione standard e protocolli di autenticazione. Per ulteriori informazioni sulla scelta di canali adatti allo scenario, vedere Canali.

È possibile compilare applicazioni listener utilizzando qualsiasi tipo di dominio applicazione: un'applicazione Windows Form, un'applicazione Web ASP.NET, un'applicazione console, un servizio Windows (anche noto come servizio Windows NT) o qualsiasi altro dominio di applicazione gestita. Dal momento che la configurazione remota viene fatta per ogni dominio applicazione, il dominio dell'applicazione deve essere in esecuzione restare in attesa di richieste.

NoteNota:

A differenza di COM, .NET Remoting non avvia l'applicazione host o server per conto dell'utente. Si tratta di un'importante differenza tra .NET Remoting e l'attivazione remota in COM.

È possibile eseguire la configurazione a livello di programmazione oppure utilizzando un file di configurazione dell'applicazione o il file di configurazione del computer.

Il sistema .NET Remoting utilizza le informazioni in questo file per restare in attesa di richieste remote e indirizzarle a un'istanza di un tipo utilizzabile in remoto. Il file specifica la modalità di attivazione del server, il nome e l'assembly del tipo per conto del quale è in attesa, e l'URI (Uniform Resource Identifier) o il nome esterno dell'oggetto. (Per ulteriori informazioni su URI di oggetti e NET.Remoting, vedere URL di attivazione.)

NoteNota:

Anche se nel file di configurazione precedente sono presenti poche impostazioni, la maggior parte dei problemi di utilizzo di .NET Remoting si verificano perché alcune di queste impostazioni sono incorrette o non combaciano con le impostazioni di configurazione per le applicazioni client. È molto facile commettere un errore nella digitazione di un nome, dimenticare una porta, o trascurare un attributo. Se si verificano problemi con l'applicazione remota, controllare prima le impostazioni di configurazione.

L'utilizzo di un file di configurazione consente di modificare la configurazione .NET Remoting senza ricompilare il file eseguibile, fra le altre cose. Per ulteriori informazioni sulla configurazione dell'infrastruttura .NET Remoting, vedere Schema delle impostazioni remote.

NoteNota:

Per informazioni sulla compilazione e l'esecuzione dell'esempio, vedere Procedura: Compilare ed eseguire un'applicazione .NET Remoting di base.

Per implementare un semplice dominio dell'applicazione host che utilizza un file di configurazione

  1. Proseguendo da Procedura: Compilare un tipo utilizzabile in remoto, creare un'altra directory in remoting chiamata host. Creare un file di configurazione per la classe remota. L'applicazione host deve essere in grado di caricare la configurazione per la classe remota, quindi il file di configurazione deve essere salvato nella stessa directory dell'assembly dell'applicazione host; in caso contrario non verrà trovato e verrà generata un'eccezione. Nel codice seguente è illustrato un file di configurazione che specifica che l'oggetto remoto è un Singleton e che la sua implementazione è una classe chiamata RemotableType situata in un assembly chiamato RemotableType. Quindi viene registrato un HttpChannel in attesa sulla porta 8989. Salvare questo file nella directory remoting\listener. Il nome file deve seguire il modello app-name.exe.config. In questo caso verrà chiamata listener.exe.config.

    <configuration>
       <system.runtime.remoting>
          <application>
             <service>
                <wellknown 
                   mode="Singleton" 
                   type="RemotableType, RemotableType" 
                   objectUri="RemotableType.rem"
                />
             </service>
             <channels>
                <channel ref="http" port="8989"/>
             </channels>
          </application>
       </system.runtime.remoting>
    </configuration>
    
  2. Creare un nuovo file di origine per il linguaggio desiderato. Importare all'inizio del file di origine lo spazio dei nomi System.Runtime.Remoting:

    Imports System
    Imports System.Runtime.Remoting
    
    using System;
    using System.Runtime.Remoting;
    
  3. Nel metodo Main, caricare il file di configurazione che configura la classe remota, visualizzare un messaggio che faccia sapere all'utente che l'host è in esecuzione e quindi attendere che venga premuto un tasto. Salvare questo file nella directory remoting\listener.

    Public Class Listener
        Public Shared Sub Main()
            RemotingConfiguration.Configure("Listener.exe.config", False)
            Console.WriteLine("Listening for requests. Press enter to exit...")
            Console.ReadLine()
        End Sub
    End Class
    public class Listener
    {
        public static void Main()
        {
            RemotingConfiguration.Configure("Listener.exe.config", false);
            Console.WriteLine("Listening for requests. Press enter to exit...");
            Console.ReadLine();
        }
    
    }
    
  4. Copiare l'assembly RemotableType.dll generata in Procedura: Compilare un tipo utilizzabile in remoto nella directory remoting\listener. L'applicazione host deve fare riferimento a questo assembly. Compilare questa classe in un file eseguibile digitando il comando seguente:

    vbc /r:RemotableType.dll Listener.vb
    csc /noconfig /r:RemotableType.dll Listener.cs
    
  5. Ora si ha un assembly chiamato Listener.exe. Provare a eseguirlo per vedere se la configurazione riesce. Una finestra di dialogo di protezione potrebbe essere visualizzata se un firewall sta bloccando la porta 8989. In tal caso fare clic sul pulsante "Sblocca" per evitare temporaneamente che il firewall blocchi quella porta.

  6. Per informazioni sulle modalità di utilizzo del tipo utilizzabile in remoto, vedere Procedura: Compilare un'applicazione client.

Esempio

' Listener.vb
Public Class Listener
    Public Shared Sub Main()
        RemotingConfiguration.Configure("Listener.exe.config", False)
        Console.WriteLine("Listening for requests. Press enter to exit...")
        Console.ReadLine()
    End Sub
End Class
// Listener.cs
using System;
using System.Runtime.Remoting;

public class Listener
{
    public static void Main(string[] args)
    {
        RemotingConfiguration.Configure("Listener.exe.config", false);
        Console.WriteLine("Listening for requests. Press enter to exit...");
        Console.ReadLine();
    }
}

Vedere anche

Attività

Procedura: Compilare un'applicazione host

Riferimenti

Schema delle impostazioni remote

Concetti

Configurazione di applicazioni remote
Attivazione del server

Altre risorse

Compilazione di un'applicazione di base di .NET Framework Remoting

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.