我一直试图在我的IDisposable WCF服务上调用Dispose方法,同时使用Ninject的NinjectServiceHost而没有任何运气。然后我下载了Ninject.extensions.WCF示例代码并尝试调用IDisposable TimeService的Dispose()方法,但它也没有被调用。
服务正确实例化,只是不调用Dispose()。
这是我自己和示例代码丢失的错误吗?
我创建了一个精简服务和测试主机,可以重现这个问题。代码如下。
我正在使用Ninject 3.0.1.10,Ninject.extensions.WCF 3.0.0.5,.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()
}
}
}
启动服务的控制台测试程序。
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();
}
}
}
服务实施
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 :(得分:0)
也许是你创建了单件服务? (InstanceContextMode.Single) 只有一个InstanceContext对象用于所有传入呼叫,并且在调用之后不会被回收。如果服务对象不存在,则创建一个