2013-07-22 2 views
4

Я пытаюсь получить метод Dispose на моем IDisposable WCF-сервисе, называемом при использовании NinjectServiceHost без везения. Затем я загрузил пример кода Ninject.extensions.WCF и попытался вызвать метод Dispose() IDisposable TimeService, но он также не вызван.NinjectServiceHost в службе WCF не вызывает Dispose()

Служба создана правильно, просто вызов Dispose() не вызван.

Это ошибка или что-то, что я и код примера отсутствуют?

Я создал отключенный сервис и тестовый узел, который воспроизводит проблему. Код ниже.

Я использую Ninject 3.0.1.10, 3.0.0.5 Ninject.extensions.WCF, .net 4.5

ServiceModule.cs код (для настройки привязок) Программа

using Ninject.Modules; 

namespace TestNinjectWcf 
{ 
    public class ServiceModule : NinjectModule 
    { 
     public override void Load() 
     { 
     Bind<Service1>().ToSelf(); 
     // I've also tried Bind<IService1>().To<Service1>() 
     // and also tried various scopes such as InParent() and InRequestScope() 
     } 
    } 
} 
Test Console

к запустите службу.

using System; 
using Ninject.Extensions.Wcf; 
using Ninject; 
using TestNinjectWcf; 

namespace TestConsole 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
     var kernel = new StandardKernel(new ServiceModule()); 
     var service = kernel.Get<NinjectServiceHost<Service1>>(); 
     service.Open(); 
     Console.WriteLine("Service Started"); 
     Console.ReadKey(); 
     service.Close(); 
     } 
    } 
} 

Внедрение Service

using System; 
using System.Diagnostics; 
using System.ServiceModel; 

namespace TestNinjectWcf 
{ 
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)] 
    public class Service1 : IService1, IDisposable 
    { 
     public Service1() 
     { 
     Debug.WriteLine("Constructor"); 
     } 

     public string GetData(int value) 
     { 
     return string.Format("You entered: {0}", value); 
     } 

     public void Dispose() 
     { 
     Debug.WriteLine("Dispose"); // This line never gets called! 
     } 
    } 
} 

ответ

0

Может быть, это, что вы создали одноточечно сервис? (InstanceContextMode.Single) Только один объект InstanceContext используется для всех входящих вызовов и не перерабатывается после вызовов. Если объект службы не существует, создается один

Смежные вопросы