Condividi tramite


Eventi e delegati con .NET Framework Remoting

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

Anche se è possibile utilizzare eventi e delegati con i servizi remoti di .NET Framework, è necessario affrontare due principali problemi per poterli utilizzare correttamente. Nello specifico, sarebbe bene utilizzarli solo quando l'autenticazione viene utilizzata su un IpcChannel.

Utilizzo di delegati

Delegati remoti creano un problema di sicurezza che deve essere risolto. Se un client passa un delegato a un server (generalmente quando un client allega un gestore eventi a un evento remoto), il delegato associato potrebbe riferirsi a un metodo non autorizzato che ha la stessa firma del metodo inteso dal servizio. Dal momento che le firme di metodi previsti e imprevisti coincidono, il servizio può richiamare il metodo imprevisto, anche se il metodo è statico (e pertanto non può essere chiamato sul client remoto).

Per ovviare a questa situazione il server deve definire delegati con tipi di parametro personalizzati e l'assembly che contiene quei tipi deve avere un nome sicuro. È inoltre sempre necessario autenticare (se non crittografare) tali comunicazioni. Consentire la deserializzazione di un tipo sul server solo se si è certi che sia il tipo da utilizzare.

Utilizzo di eventi

Considerati i problemi di sicurezza con i delegati, l'utilizzo di eventi non è consigliato. È necessario invece definire un servizio di callback client che pubblica metodi che il servizio può chiamare quando deve comunicare con il client. Se si decide di utilizzare eventi remoti con un IpcChannel autenticato (e i delegati sono stati dichiarati come descritto precedentemente), i metodi del gestore eventi client dovranno essere chiamate unidirezionali. In caso di generazione di eventi, infatti, il server richiama i delegati nell'elenco chiamate dell'evento. Il sistema di gestione degli eventi si blocca su quella chiamata fino a che il client non prosegue o scade. I client che non sono in attesa, quindi, riducono notevolmente la velocità effettiva di semplici eventi a meno che il gestore eventi non sia un metodo unidirezionale.

Vedere anche

Concetti

Sicurezza in .NET Remoting