2009-07-22 13 views
5

In meiner ASP.NET-Anwendung habe ich eine Zeile im Start-Event der globalen Anwendung, die den Remotekanal des Clients durch Aufruf von RemotingConfiguration.Configure() konfiguriert.So ermitteln Sie, ob der Remoting-Kanal bereits registriert ist

Das funktioniert gut, das erste Mal, aber wenn meine Web-Anwendung zurückgeführt wird, wird die Anwendung Startereignis erneut gebrannt, um die folgenden Remote Ausnahme verursacht:

Konfiguration Remoting mit Ausnahme ‚System.Runtime.Remoting.RemotingException gescheitert : Der Kanal 'tcp' ist bereits registriert.

Ich möchte erkennen, ob der Kanal bereits konfiguriert ist, so dass ich vermeiden kann, diese Ausnahme zu bekommen.

Antwort

0

Aber was würden Sie tun, wenn Sie feststellen, dass es bereits registriert war?

In jedem Fall wollte ich nur sicherstellen, dass Sie wussten, dass .NET Remoting für WCF veraltet ist.

+0

Wenn ich wüsste, dass es bereits registriert wurde, würde ich nicht RemotingConfiguration.Configure() aufrufen, die vermeiden Ausnahme. –

+0

Aber es wäre nicht für _you_ registriert, oder? –

+0

Es wäre für unsere Software registriert. Meine Vermutung ist, dass das erste Mal, wenn wir den Remoting-Kanal registrieren, für den Prozess w3wp.exe registriert wird. Da der Prozess nicht neu gestartet wird, wenn die Webanwendung wiederverwendet wird, verursacht der zweite Konfigurationsaufruf aus dem Ereignis "application_start" eine Ausnahme. –

4

Ich habe auch dieses Problem gehabt.

Das Problem ist, dass Sie die Anwendung stoppen können, die RemotingConfiguration.Configure() aufgerufen hat, aber das macht den Kanal nicht verfügbar. Es hat etwas mit Ports zu tun oder es könnte nur der Name des Channels sein, da bin ich mir nicht sicher.

Die Lösung, die ich gefunden habe, scheint zu funktionieren, um die registrierten Kanäle zu erhalten und die Registrierung des Kanals aufzuheben, den Sie entfernen möchten. Hier

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

Ich hoffe, das für Sie arbeitet, hat es für mich

Verwandte Themen