Attivazione del server

Questo argomento è specifico di una tecnologia legacy mantenuta per una questione di compatibilità con le applicazioni esistenti di versioni precedenti e non è consigliato per il nuovo sviluppo. Le applicazioni distribuite devono ora essere sviluppate utilizzando  Windows Communication Foundation (WCF).

Gli oggetti attivati dal server sono oggetti la cui durata è direttamente controllata dal server. Il dominio di applicazione del server crea questi oggetti solo quando il client effettua una chiamata al metodo sull'oggetto, piuttosto che quando il client chiama new (New() in Visual Basic) o Activator.GetObject; ciò risparmia un round trip di rete solo per la creazione di istanze. Solo un proxy viene creato nel dominio di applicazione del client quando un client richiede un'istanza di un tipo attivato dal server. Vuole dire che per i tipi attivati dal server sono consentiti solo costruttori predefiniti. Per pubblicare un tipo le cui istanze saranno create con costruttori specifici che prendono argomenti è possibile utilizzare Attivazione da client o pubblicare dinamicamente l'istanza particolare dell'utente.

Modalità di attivazione del server

Ci sono due modalità di attivazione (o valori WellKnownObjectMode ) per oggetti attivati dal server: Singleton e SingleCall.

I tipi Singleton non hanno mai più di un'istanza in un determinato momento. Se un'istanza esiste, tutte le richieste del client vengono servite da quell'istanza. Se un'istanza non esiste, il server crea un'istanza e tutte le successive richieste del client verranno servite da quell'istanza. Dal momento che ai tipi Singleton è associata una durata predefinita, i client non riceveranno sempre un riferimento alla stessa istanza della classe utilizzabile in remoto, anche se non c'è mai più di un'istanza disponibile in un determinato momento.

I tipi SingleCall hanno sempre un'istanza per ogni richiesta del client. La prossima chiamata al metodo sarà servita da un'istanza del server diversa, anche se l'istanza precedente non è stata riciclata ancora dal sistema. I tipi SingleCall non partecipano al sistema del lease di durata.

Per creare un'istanza di un tipo attivato dal server i client configurano l'applicazione a livello di codice o utilizzando un file di configurazione. Quando si configura un'applicazione a livello di codice, si utilizza il metodo Activator.GetObject per creare sul client un'istanza di un oggetto attivato dal server. Quando si configura un'applicazione con un file di configurazione è possibile chiamare Activator.GetObject o utilizzare l'operatore new per creare sul client un'istanza di un oggetto attivato dal server.

y0h540a7.note(it-it,VS.100).gifNota:
Potrebbe non essere necessario registrare il canale sul lato client. Se il client non registra un canale, il sistema .NET Remoting crea automaticamente un canale utilizzando uno dei canali predefiniti specificato nel file Machine.config per effettuare richieste in uscita. Questa selezione automatica del canale sul client non registra il canale per l'attesa di qualsiasi funzione di callback dal server e, a meno che quel canale personalizzato non venga aggiunto al file machine.config, non registra nessuna implementazione di canale personalizzato. In questi casi, è necessario registrare il tipo di canale si vuole utilizzare nel dominio applicazione del client.

Nell'esempio di codice seguente viene mostrata una chiamata a Activator.GetObject che presuppone la registrazione di un oggetto TcpChannel per comunicare sulla porta 8080. Se al cliente è noto che l'oggetto del server implementa una determinata interfaccia, è necessario utilizzare una chiamata a Activator.GetObject, in quanto per creare un'istanza di una classe è possibile utilizzare solo new (New in Visual Basic).

Dim MyRemoteClass As RemoteObjectClass = _
   CType( _
      Activator.GetObject(GetType(RemoteObjectClass), _
         "tcp://computername:8080/RemoteObjectUri" ), _
      RemoteObjectClass
   ) 
RemoteObjectClass MyRemoteClass = (RemoteObjectClass)Activator.GetObject(
   typeof(RemoteObjectClass),
   "tcp://computername:8080/RemoteObjectUri "
);

È importante ricordare che fino a questo momento non vi è stata alcuna comunicazione con il server, pertanto non è stata creata un'istanza dell'oggetto remoto. A essere stato instanziato, è l'oggetto proxy sul lato client. Il client ora può utilizzare MyRemoteClass come se fosse un riferimento diretto all'oggetto remoto. L'istanza di RemoteObjectClass che il client utilizza per comunicare da chiamata al metodo a chiamata al metodo varia a seconda che l'oggetto server sia dichiarato come un tipo Singleton o SingleCall. Indipendentemente se l'autore dell'oggetto server espone queste informazioni o meno, il client tratta il riferimento all'oggetto che reca esattamente le stesse informazioni.

Singleton

In COM, "singleton" vuol dire che finché i client hanno riferimenti all'oggetto, l'oggetto non sarà eliminato dalla memoria. In .NET Remoting, invece, un oggetto Singleton è soggetto al lease di durata specificato, pertanto può essere riciclato anche se i client contengono attualmente riferimenti a lui. È possibile creare il primo tipo di oggetto Singleton eseguendo l'override del metodo InitializeLifetimeService di MarshalByRefObject per restituire un riferimento null (Nothing in Visual Basic). Ciò permette di mantenere in memoria l'oggetto in maniera efficace finché il dominio applicazione dell'host è in esecuzione. Per iinformazioni dettagliate, vedere Lease di durata. È possibile creare il secondo tipo di oggetto Singleton configurando la durata di lease iniziale nel file di configurazione .NET Remoting.

Vedere anche

Riferimento

WellKnownObjectMode Enumeration

Concetti

Attivazione di oggetti remoti
Attivazione da client
Lease di durata