将WCF服务从IIS移至Windows服务

时间:2020-03-06 14:45:59  来源:igfitidea点击:

我们有一个现有的WCF服务,该服务利用wsDualHttpBinding启用对客户端的回调。我正在考虑将其移至netTcpBinding以获得更好的性能,但我对从IIS托管服务(我们目前喜欢的"舒适区")转而拥有自己的Windows服务进行托管非常谨慎。我希望我们仍然可以在IIS 7上托管它,但是Win2K8在一段时间内对我们来说将不再是现实。

创建我们自己的Windows服务来承载WCF服务时,我应该注意什么?诸如终生管理和请求限制之类的功能是IIS托管提供的免费功能,因此我也想知道我们如何能够有效地自己托管服务,而无需让IIS为我们辛苦工作。谢谢! :)

解决方案

在Windows服务应用程序(http://msdn.microsoft.com/zh-cn/library/ms734781.aspx)中托管是一个好的开始。

如果可以在Vista上托管服务,则还可以从Windows进程激活服务(WAS)中受益。 WAS是IIS进程激活的概括,可用于通过非HTTP端点(TCP,命名管道,MSMQ)激活进程。要了解有关WAS中托管的WCF的更多信息,请阅读http://msdn.microsoft.com/zh-cn/library/ms733109.aspx。要了解如何安装和配置WAS,请阅读http://msdn.microsoft.com/zh-cn/library/ms731053.aspx。

因此,由于我们无法使用WAS进行托管,因此需要注意两点。

  • 如果服务崩溃,则默认情况下它不会重新启动(尽管我们可以在服务属性中更改此设置)
  • 如果IIS挂起或者变得太大,IIS将对其进行回收;否则,IIS将回收该应用程序池。如果要获得相同的可靠性,则必须自己执行此操作。
  • 我们必须为要在其下运行的服务创建一个帐户,或者使用默认服务之一。重新尝试以SYSTEM或者管理员帐户的身份运行服务;如果要使用内置帐户,请使用NETWORK SERVICE。
  • 原地调试变得更加困难。
  • 考虑使用错误记录器,例如log4net

话虽如此,我在9个月前为客户部署了WCF / Windows服务组合;它被大量使用,并且一次都没有死亡。

我们可以在Windows服务中请求节流,这是WCF配置的一部分。请注意,默认值非常低,我们可能必须增加这些默认值。