2009-07-22 22 views
5

W mojej aplikacji ASP.NET, mam linię w zdarzeniu startowym aplikacji globalnej, która konfiguruje kanał klienta zdalnego, wywołując RemotingConfiguration.Configure().Jak ustalić, czy kanał zdalny jest już zarejestrowany?

Działa to dobrze za pierwszym razem, ale kiedy moja aplikacja internetowa zostanie poddane recyklingowi, zdarzenie początek aplikacja jest zwolniony ponownie powodując następujący wyjątek remoting:

Remoting konfiguracja nie powiodło z wyjątkiem „System.Runtime.Remoting.RemotingException : Kanał "tcp" jest już zarejestrowany.

Chciałbym wykryć, czy kanał jest już skonfigurowany, aby uniknąć tego wyjątku.

Odpowiedz

0

Ale co byś zrobił, gdybyś znalazł się już zarejestrowany?

W każdym razie chciałem się upewnić, że wiesz, że .NET Remoting został przestarzały na rzecz WCF.

+0

Gdybym wiedział, że został już zarejestrowany, nie nazwałbym RemotingConfiguration.Configure(), aby uniknąć wyjątek. –

+0

Ale nie byłby zarejestrowany dla ciebie, prawda? –

+0

Zostałby zarejestrowany w naszym oprogramowaniu. Domyślam się, że po raz pierwszy rejestrujemy kanał zdalnego przekazywania, zostaje on zarejestrowany dla procesu w3wp.exe. Ponieważ proces nie zostaje zrestartowany po ponownym uruchomieniu aplikacji sieci Web, drugie wywołanie konfiguracji ze zdarzenia application_start powoduje wyjątek. –

4

miewam ten problem zbyt.

Problem polega na tym, że można zatrzymać aplikację o nazwie RemotingConfiguration.Configure(), ale to nie powoduje, że kanał jest dostępny. To ma coś wspólnego z portami lub może to być nazwa kanału, nie jestem pewien.

Rozwiązaniem, które udało mi się znaleźć, jest uzyskanie zarejestrowanych kanałów i wyrejestrowanie kanału, który chcesz usunąć.

Oto kod

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 

Mam nadzieję, że to działa dla Ciebie, że ma dla mnie