Windows服务作为WCF服务的主机 - 依赖注入策略

时间:2013-09-11 07:46:15

标签: .net wcf dependency-injection windows-services ninject

我正在编写一个托管一堆WCF服务的Windows服务。我正在使用NINJECT与AOP一起使用拦截器工作正常。我只是想知道我的实现是否会在更高的负载下保持。事情就是这样:

在我的program.Main()方法中:

ServiceBase[] servicesToRun = { kernel.Get<WcfServiceHostService>() };
ServiceBase.Run(servicesToRun);

还有WcfServiceHostService构造函数,它接受注入的接口:

public WcfServiceHostService(IVakService vakService, IRoosterService roosterService) : this()
{
var serviceList = new List<ServiceHost> { new ServiceHost(vakService), new ServiceHost(roosterService) };
this.Services = serviceList;
}

问题是 - ServiceHost构造函数方法可以用作通用的新ServiceHost或类似新的ServiceHost(SingletonInstance)(http://msdn.microsoft.com/en-us/library/system.servicemodel.servicehost.aspx) - 我的问题:通过提供实例而不是类型,从而强制接口实现单身 - 我不是会对绩效产生负面影响吗?

P.S。 IIS不是更好的选择来托管WCF服务吗?

1 个答案:

答案 0 :(得分:0)

我在生产环境中的Windows服务中托管了100多个WCF服务而没有任何问题。与IIS相比,部署要容易得多。当然,IIS提供了如here

所述的按需加载和流程回收等功能

至于Singleton与否,我认为this page有一个很好的答案,而且一如既往取决于你想要达到的目标:

  

“单例服务是可扩展性的死敌。问题在于,当多个客户端连接到单例时,它们可能会同时进行[...]。单例必须同步对其状态的访问避免状态腐败。[...]这可能会降低吞吐量,响应能力和可用性“