Generazione di un’applicazione host

La classe RemotableType definita nell'argomento Generazione di un tipo remotizzabile non è speciale di per sé. Per abilitare oggetti di altri domini applicazione alla creazione di istanze di questo oggetto in modalità remota, è necessario generare un'applicazione host o listener che consenta di eseguire le due operazioni riportate di seguito:

  • Scegliere e registrare un canale, vale a dire 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, in modo che il canale possa essere utilizzato per ascoltare le richieste per tale tipo.

.NET Framework include due canali predefiniti, HttpChannel, in cui è utilizzata la formattazione SOAP e TcpChannel, in cui è utilizzata la formattazione binaria. È consigliabile cominciare con HttpChannel, perché in alcuni scenari può essere utilizzato tramite i firewall senza aprire una porta e supporta i protocolli di protezione e autenticazione standard. Per ulteriori informazioni sulla scelta dei canali, vedere Canali.

È possibile generare applicazioni listener utilizzando qualsiasi tipo di dominio applicazione: un'applicazione Windows Form, un'applicazione Web ASP.NET, un'applicazione console, un servizio Windows (o Servizio Windows NT) o qualsiasi altro dominio applicazione gestito. È necessario che il dominio applicazione sia in esecuzione per attendere richieste, dal momento che la configurazione remota viene effettuata per dominio applicazione.

Nota   A differenza di COM, nella comunicazione remota l'applicazione host o server non viene avviata automaticamente. Si tratta di una differenza sostanziale tra .NET Remoting e l'attivazione remota di COM.

La configurazione può essere effettuata tramite codice o mediante un file di configurazione dell'applicazione o del computer. Nell'esempio di codice che segue viene implementato un semplice dominio applicazione host RemotableType per cui è utilizzato un file di configurazione. L'utilizzo del file di configurazione consente, tra l'altro, di modificare la configurazione della comunicazione remota senza dover compilare l'eseguibile. Per ulteriori informazioni sulla configurazione dell'infrastruttura di .NET Remoting, vedere Configurazione.

' Listener.vb
Imports System
Imports System.Runtime.Remoting

Public Class Listener
   Public Shared Sub Main()
      RemotingConfiguration.Configure("Listener.exe.config")
      Console.WriteLine("Listening for requests. Press Enter to exit...")
      Console.ReadLine()
   End Sub 'Main
End Class 'Listener
[C#]
// Listener.cs
using System;
using System.Runtime.Remoting;

public class Listener{
   public static void Main(){
      RemotingConfiguration.Configure("Listener.exe.config");
      Console.WriteLine("Listening for requests. Press Enter to exit...");
      Console.ReadLine();
   }
}

Per compilare questa classe in un eseguibile host o listener mediante gli strumenti della riga di comando forniti con .NET Framework SDK, salvarla come Listener.estensione-linguaggio o con qualsiasi altro nome file in cui l'estensione del linguaggio corrisponda al linguaggio scelto per la compilazione. Salvare il file nella stessa directory in cui è stato salvato RemotableType.dll, la cui generazione è descritta nell'argomento Generazione di un tipo remotizzabile. Al prompt dei comandi in tale directory, digitare il seguente comando:

[Visual Basic]

vbc /r:RemotableType.dll Listener.vb

[C#]

csc /noconfig /r:RemotableType.dll Listener.cs

In questo esempio il nome file è:

[Visual Basic]

Listener.vb

[C#]

Listener.cs

Per consentire il caricamento della configurazione per la classe RemotableType, il file Listener.exe.config deve essere reperibile per la classe Listener. Sarà pertanto opportuno salvarlo nella stessa directory di Listener.exe, altrimenti non verrà trovato e verrà generata un'eccezione. Nell'esempio di codice che segue viene mostrato il file di configurazione Listener.exe.config per questo dominio applicazione host o di attesa.

<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>

Le informazioni contenute in questo file consentono al sistema di comunicazione remota di attendere le richieste remote e inviarle a un'istanza di un tipo remotizzabile. Nel file sono specificati la modalità di attivazione da server Singleton, il nome e l'assembly del tipo per conto del quale è in attesa, nonché l'URI (Uniform Resource Identifier) o il nome esterno dell'oggetto. Per ulteriori dettagli sugli URI dell'oggetto e sulla comunicazione remota, vedere URL di attivazione. Nel file viene inoltre indicato al sistema remoto di attendere le richieste sulla porta 8989 mediante il canale HttpChannel fornito dal sistema.

Nota   Il file di configurazione non contiene molte impostazioni, eppure la maggior parte dei problemi connessi all'utilizzo di .NET Remoting si verifica perché alcune di esse non sono corrette o non corrispondono alle impostazioni di configurazione per le applicazioni client. È facile commettere un errore nella digitazione del nome, dimenticare una porta o tralasciare un attributo. Se si riscontrano problemi con l'applicazione remota, per prima cosa controllare le impostazioni di configurazione.

Vedere anche

Generazione di un'applicazione .NET Remoting di base | Configurazione | Schema delle impostazioni remote | Attivazione da server | WellKnownObjectMode.Singleton