2013-07-02 11 views
7

Ich habe ein Problem, die Erweiterungen von wcf mit mehr als einem selbst-Host-Bootstrapper arbeiten. Mit einem werden meine Dienste von ninject fine (pro Aufruf) erzeugt, aber wenn ich einen weiteren hinzufüge, bekomme ich eine Ausnahme, dass der ChannelDispatcher seinen IChannelListener nicht öffnen kann, die innere Ausnahme besagt, dass eine Registrierung bereits für URI 'net.tcp:// localhost: 901/MeinService '.Ninject WCF Bootstrapper Registrierung mehrerer Dienste

Mein Registrierungscode sieht wie folgt aus:

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(); 

Beide Dienste die richtigen Abschnitte in der Konfigurationsdatei haben, und sie haben beide unterschiedliche Endpunkt URIs mit verschiedenen Ports. Die gleiche Konfiguration funktioniert gut, wenn ich das alles manuell verbinde.

Hat jemand hier einen Anhaltspunkt? Bit stapfte ...

Prost

+4

haben Sie jemals Ihr Problem behoben? wie ich dieses Problem selbst bekomme. – talisker

+0

Entschuldigung für die späte Antwort. Letztendlich kam ich leider nicht dazu, das Problem zu lösen, andere Arbeiten kamen in die Quere und am Ende wechselten wir zu AutoFac und nicht zu Ninject. – user303754

Antwort

4

ich in diese Ausgabe lief gerade jetzt, ist die Lösung einen Bootstrapper mit allen Konfigurationen in seiner params zu haben:

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

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

_myServicesHost.Start(); 
0

Eine weitere Alternative ist separaten Kernel zu verwenden, für jede NinjectSelfHostBootstrapper Instanz

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(); 

auch wenn Sie NinjectSelfHostBootstrapper _myServiceHost.Dispose() seinen Kernel auch entsorgen entsorgen werden d. Also, wenn Sie Ihren Kernel woanders verwenden, werden Sie auf Probleme stoßen.

Verwandte Themen