当“成本”话题出现时,我和一位同事正在讨论 WFC 服务。
问题是这样的:
鉴于 IIS 托管的 WCF 服务和 Windows 服务托管的 WCF 服务执行完全相同的操作,如果它们都接受相同的负载,哪个服务在内存和 CPU 周期方面会更“昂贵”?
我们不关心初始启动编码、安装或配置(IIS 似乎旨在提供更简单的体验),只关心运行服务的基本成本。
当“成本”话题出现时,我和一位同事正在讨论 WFC 服务。
问题是这样的:
鉴于 IIS 托管的 WCF 服务和 Windows 服务托管的 WCF 服务执行完全相同的操作,如果它们都接受相同的负载,哪个服务在内存和 CPU 周期方面会更“昂贵”?
我们不关心初始启动编码、安装或配置(IIS 似乎旨在提供更简单的体验),只关心运行服务的基本成本。
我无法提供具体的数字,但如果这是一个大问题,你绝对应该做性能测试来确定。对于典型的基于 HTTP 的 WCF 服务,所有请求最初将由 Windows 内部的 http.sys 处理,然后分派到适当的进程。您的服务是托管在 IIS 中还是独立的,与您使用的特定于 WCF 的配置设置相比,在每个调用、每个会话或单例配置以及请求大小限制和请求限制方面都没有那么重要。
我会关注可用性以及比严格关注性能数字更有意义的东西,因为它们应该几乎相同。
底线:使用任何更方便,必要时进行性能测试。
IIS 或基于 Windows 服务的 WCF 托管之间的一项非常重要的性能考虑是绑定类型。IIS 仅支持通过 HTTP 运行的 WCF 绑定,例如wsHttpBinding
. basicHttpBinding
, ETC。
众所周知,非 Http 绑定具有更好的性能,例如netTcpBinding(我相信要求服务和客户端都基于 WCF)或netNamedPipeBinding(最快,但服务/客户端必须在同一台机器上)。这些当然有其自身的局限性,尤其是在灵活性方面。
这是一个很好的概述:http ://weblogs.asp.net/spano/archive/2007/10/02/choosing-the-right-wcf-binding.aspx
这里有一个非常相似的讨论:WCF Binding Performance
我知道这并不能完全回答您的问题,但我想分享我的经验。
我有一个 Windows 控制台应用程序,它在计划时调用 IIS 中托管的 WCF 服务。在这种架构中,IIS 实际上是完全没有必要的,它只是整个解决方案的一个附加组件。出于营销原因,它确实包含在解决方案中,以增强产品,而不是出于技术原因。
这些是我面临的主要问题,以及为什么我会出于技术原因避免使用 IIS,这适用于我的经验。请注意:我并不是说在 IIS 中托管 WCF 服务是一个坏主意。我只是从我目前正在开发的产品中给出我的想法。
根据我的经验,更少的系统 = 更少可能出错。但是您需要确定您是否具备实施可靠的自托管服务的技能。这一切又直接关系到开发、部署和维护的成本。