我们啥时候应该在 IIS 中托管 WCF 服务,啥时候应该在 Windows 服务中托管?

Posted

技术标签:

【中文标题】我们啥时候应该在 IIS 中托管 WCF 服务,啥时候应该在 Windows 服务中托管?【英文标题】:When should we host WCF service in IIS and when should we host in a windows service?我们什么时候应该在 IIS 中托管 WCF 服务,什么时候应该在 Windows 服务中托管? 【发布时间】:2011-11-25 08:49:43 【问题描述】:

我需要托管我的 WCF 服务,但我无法决定是否应该在 IIS 或 Windows 服务中托管它?

请问一个比另一个有什么优点、缺点、好处?

谢谢

【问题讨论】:

【参考方案1】:

版本 7 下的 IIS 对于任何严肃的托管都是不可能的......

关于 IIS7+/WAS 与 NT 服务中的自托管:

IIS7/WAS 设置将“按需加载”,例如当您的第一个请求进来时,将创建一个ServiceHost,然后该服务主机创建服务类来处理请求。从内存的角度来看,这是有益的(如果没有请求进入,ServiceHost 不会使用内存),但是当 IIS 第一次需要启动服务主机时,这会增加第一次调用的额外开销

NT 服务允许您预先创建ServiceHost 并打开它,以便立即处理请求;更多的内存使用,但响应更快,至少在“第一次调用”时

自托管的另一个好处:您可以 100% 负责服务主机何时启动、暂停、停止等。使用 IIS/WAS,您有时会受到 IIS 的摆布,因为它有可能在最糟糕的时刻回收应用程序池......

【讨论】:

【参考方案2】:

IIS 的主要优点是它为您处理服务的生命周期:激活、回收......

如果您没有 v7,它的主要缺点是没有 WAS 它只能托管基于 http 的 Web 服务

如果出现致命错误,服务需要更加小心...然后需要安装,而网站一旦创建就可以复制到其 web 文件夹中

如果您的 iis 版本 >= 7,那么我认为不使用 WAS 的兴趣不大,因为它支持所有 wcf 传输,但其他人可能有不同的看法...

【讨论】:

以上是关于我们啥时候应该在 IIS 中托管 WCF 服务,啥时候应该在 Windows 服务中托管?的主要内容,如果未能解决你的问题,请参考以下文章

在 Server 2008 上的 Windows 服务中托管 WCF 服务时应该使用啥帐户?

使用 .svc 文件和在“WCF 服务主机”中托管 WCF 服务有啥区别?

在IIS托管的WCF服务中使用RabbitMQ Queue

选择使用 IIS 进行 WCF 服务托管或使用 Windows 服务进行自托管

想要将 WCF Web 服务作为 Windows 服务托管,而不是在 IIS 中托管

IIS 7 托管 WCF 服务使用域帐户作为应用程序池标识