2009-07-22 11 views
5

Nella mia applicazione ASP.NET, ho una riga nell'evento di avvio dell'applicazione globale che configura il canale remoto del client chiamando RemotingConfiguration.Configure().Come determinare se il canale remoto è già registrato

Questo metodo funziona bene la prima volta, ma quando la mia applicazione web viene riciclato, l'evento di avvio dell'applicazione è sparato di nuovo causando la seguente eccezione Remoting:

Remoting configurazione non riuscita con l'eccezione 'System.Runtime.Remoting.RemotingException : Il canale 'tcp' è già registrato.

Vorrei rilevare se il canale è già configurato in modo da evitare l'eccezione.

risposta

0

Ma cosa faresti se ti accorgessi che è già stato registrato?

In ogni caso, volevo solo assicurarmi che sapessi che .NET Remoting è stato deprecato a favore di WCF.

+0

Se sapessi che è stato già registrato, io non lo chiamerei RemotingConfiguration.Configure() per evitare il eccezione. –

+0

Ma non sarebbe registrato a _you_, vero? –

+0

Sarebbe registrato al nostro software. La mia ipotesi è che la prima volta che registriamo il canale remoto, esso viene registrato per il processo w3wp.exe. Poiché il processo non viene riavviato quando l'app Web si ricicla, la seconda chiamata di configurazione dall'evento application_start causa un'eccezione. –

4

Ho avuto anche questo problema.

Il problema è che è possibile interrompere l'applicazione che ha chiamato RemotingConfiguration.Configure() ma che non rende disponibile il canale. Ha qualcosa a che fare con le porte o potrebbe essere solo il nome del canale, non ne sono sicuro.

La soluzione che ho trovato sembra funzionare per ottenere i canali registrati e annullare la registrazione del canale che si desidera rimuovere.

Ecco il codice

RemotingConfiguration.Configure(appConfig, false); 

// do this to unregister the channel 
IChannel[] regChannels = ChannelServices.RegisteredChannels; 
IChannel channel = (IChannel)ChannelServices.GetChannel(regChannels[0].ChannelName); 

ChannelServices.UnregisterChannel(channel); 

RemotingConfiguration.Configure(appConfig, false); // this is just a test to see if we get an error 

Spero che questo funziona per voi, è stato per me

Problemi correlati