2013-07-02 10 views
7

Mam problem z uzyskaniem rozszerzeń wcf do pracy z więcej niż jednym programem ładującym samego hosta. Jedna moja usługa jest tworzona przez ninject fine (za każde połączenie), ale kiedy dodaję inny, otrzymuję wyjątek, że ChannelDispatcher nie może otworzyć swojego IChannelListener, wewnętrzny wyjątek stwierdza, że ​​rejestracja już jest związana z identyfikatorem URI 'net.tcp:// localhost: 901/MyService ".Program ładujący początkowy WCF rejestrujący wiele usług

Mój kod rejestracyjny wygląda następująco:

var myService= NinjectWcfConfiguration.Create<MyService, NinjectServiceSelfHostFactory>(); 
_myServiceHost= new NinjectSelfHostBootstrapper(() => _kernel, myService); 

var myService2= NinjectWcfConfiguration.Create<MyService2, NinjectServiceSelfHostFactory>(); 
_myService2Host= new NinjectSelfHostBootstrapper(() => _kernel, myService2); 

_myServiceHost.Start(); 
_myService2Host.Start(); 

Obie usługi mają odpowiednie sekcje w pliku konfiguracyjnym i oboje mają różne końcowych URI z różnych portów. Ta sama konfiguracja działa dobrze, jeśli wszystko to wykonam ręcznie.

Czy ktoś ma tu jakąś wskazówkę? Bitowe zakłopotany ...

Cheers

+4

Czy kiedykolwiek naprawiłeś swój problem? ponieważ zdarza mi się uzyskać ten sam problem. – talisker

+0

Przepraszam za spóźnioną odpowiedź. Nie udało mi się rozwiązać tego problemu, niestety, inne prace stały na przeszkodzie, a następnie zmieniliśmy na AutoFac zamiast Ninject. – user303754

Odpowiedz

4

wpadłem na ten problem właśnie teraz, rozwiązaniem jest posiadanie jednego inicjującego ze wszystkich konfiguracjach w swoich params:

var myService= NinjectWcfConfiguration.Create<MyService, NinjectServiceSelfHostFactory>(); 
var myService2= NinjectWcfConfiguration.Create<MyService2, NinjectServiceSelfHostFactory>(); 

_myServicesHost= new NinjectSelfHostBootstrapper(() => _kernel, myService, myService2); 

_myServicesHost.Start(); 
0

Inną alternatywą jest zastosowanie oddzielnego jądra dla każdej instancji NinjectSelfHostBootstrapper

var myService= NinjectWcfConfiguration.Create<MyService, NinjectServiceSelfHostFactory>(); 
_myServiceHost= new NinjectSelfHostBootstrapper(() => new StandardKernel(YourInjectionModule), myService); 

var myService2= NinjectWcfConfiguration.Create<MyService2, NinjectServiceSelfHostFactory>(); 
_myService2Host= new NinjectSelfHostBootstrapper(() => new StandardKernel(YourInjectionModule), myService2); 

_myServiceHost.Start(); 
_myService2Host.Start(); 

również podczas dysponowania NinjectSelfHostBootstrapper _myServiceHost.Dispose() jego jądro zostanie także dysponowania re. Jeśli więc użyjesz jądra gdzie indziej, napotkasz problemy.

Powiązane problemy