2013-07-02 33 views
7

Tôi gặp sự cố khi mở rộng wcf để làm việc với nhiều hơn một bootstrapper tự lưu trữ. Với một dịch vụ của tôi được tạo ra bởi tiền phạt ninject (mỗi cuộc gọi), nhưng khi tôi thêm một dịch vụ khác, tôi nhận được ngoại lệ là ChannelDispatcher không thể mở IChannelListener, ngoại lệ bên trong cho biết đăng ký đã được eixsts cho net.tcp của URI:// localhost: 901/MyService '.Ninject WCF bootstrapper đăng ký nhiều dịch vụ

mã số đăng ký của tôi trông như thế này:

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

Cả hai dịch vụ có các phần chính xác trong tập tin cấu hình và cả hai đều có URI endpoint khác nhau với các cảng khác nhau. Các cấu hình tương tự hoạt động tốt nếu tôi dây tất cả điều này lên bằng tay.

Có ai có đầu mối ở đây không? Bit bối rối ...

Cheers

+4

bạn đã từng khắc phục sự cố của mình chưa? khi tôi gặp phải vấn đề này. – talisker

+0

xin lỗi vì trả lời muộn. Tôi đã không nhận được xung quanh để giải quyết điều này cuối cùng không may, công việc khác có trong cách và sau đó chúng tôi đã kết thúc chuyển sang AutoFac hơn là Ninject. – user303754

Trả lời

4

Tôi chạy vào vấn đề này ngay bây giờ, giải pháp là phải có một Bootstrapper với tất cả các cấu hình trong params của nó:

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

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

_myServicesHost.Start(); 
0

Một lựa chọn khác là sử dụng hạt nhân riêng biệt cho mỗi trường hợp 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(); 

Ngoài ra, khi bạn vứt bỏ NinjectSelfHostBootstrapper _myServiceHost.Dispose() Kernel của nó cũng sẽ được định đoạt d. Vì vậy, nếu bạn sử dụng hạt nhân của bạn ở một nơi khác, bạn sẽ gặp phải vấn đề.

Các vấn đề liên quan