0

我正在编写一个托管一堆 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 构造函数方法可以用作通用的 new ServiceHost 或类似 new ServiceHost(SingletonInstance) (http://msdn.microsoft.com/en-us/library/system.servicemodel.servicehost.aspx) - 我的问题:通过提供实例而不是类型,从而迫使接口实现成为单例 - 我不是对性能产生负面影响吗?

PS 难道 IIS 不是托管 WCF 服务的更好选择吗?

4

1 回答 1

0

我在生产环境中的 Windows 服务中托管了 100 多个 WCF 服务,没有任何问题。相比IIS部署要容易很多。当然,IIS 提供了诸如按需加载和进程回收等功能,如此处所述

至于单身与否,我认为这个页面有一个很好的答案,并且一如既往地取决于你想要实现的目标:

“单例服务是可扩展性的死敌。问题是当多个客户端连接到单例时,他们可能都同时这样做 [...]。单例必须同步对其状态的访问以避免状态损坏。[. ..] 这可能会降低吞吐量、响应能力和可用性”

于 2013-09-11T08:54:50.647 回答