2009-07-22 6 views
5

Dans mon application ASP.NET, j'ai une ligne dans l'événement global de démarrage de l'application qui configure le canal distant du client en appelant RemotingConfiguration.Configure().Comment déterminer si le canal distant est déjà enregistré

Cela fonctionne bien la première fois, mais quand mon application Web est recyclé, l'événement de démarrage de l'application est tiré à nouveau provoque l'exception Remoting suivante:

configuration Remoting échoué à l'exception « System.Runtime.Remoting.RemotingException : La chaîne 'tcp' est déjà enregistrée.

Je voudrais détecter si le canal est déjà configuré afin que je puisse éviter d'obtenir cette exception.

Répondre

0

Mais que feriez-vous si vous trouviez que c'était déjà enregistré?

Dans tous les cas, je voulais juste m'assurer que vous saviez que .NET Remoting a été déprécié en faveur de WCF.

+0

Si je savais qu'il était déjà enregistré, je ne qualifierais pas RemotingConfiguration.Configure() pour éviter la exception. –

+0

Mais ce ne serait pas enregistré à _you_, n'est-ce pas? –

+0

Il serait enregistré dans notre logiciel. Ma conjecture est que la première fois que nous enregistrons le canal à distance, il devient enregistré pour le processus w3wp.exe. Comme le processus ne redémarre pas lorsque l'application Web est recyclée, le second appel de configuration de l'événement application_start provoque une exception. –

4

J'ai eu ce problème aussi.

Le problème est que vous pouvez arrêter l'application qui a appelé RemotingConfiguration.Configure() mais cela ne rend pas le canal disponible. C'est quelque chose à voir avec les ports ou peut-être juste le nom de la chaîne, je ne suis pas sûr.

La solution que j'ai trouvée qui semble fonctionner est d'obtenir les canaux enregistrés et de désenregistrer le canal que vous voulez supprimer.

Voici un code

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 

J'espère que cela fonctionne pour vous, il a pour moi