5

当“成本”话题出现时,我和一位同事正在讨论 WFC 服务。

问题是这样的:

鉴于 IIS 托管的 WCF 服务和 Windows 服务托管的 WCF 服务执行完全相同的操作,如果它们都接受相同的负载,哪个服务在内存和 CPU 周期方面会更“昂贵”?

我们不关心初始启动编码、安装或配置(IIS 似乎旨在提供更简单的体验),只关心运行服务的基本成本。

4

3 回答 3

3

我无法提供具体的数字,但如果这是一个大问题,你绝对应该做性能测试来确定。对于典型的基于 HTTP 的 WCF 服务,所有请求最初将由 Windows 内部的 http.sys 处理,然后分派到适当的进程。您的服务是托管在 IIS 中还是独立的,与您使用的特定于 WCF 的配置设置相比,在每个调用、每个会话或单例配置以及请求大小限制和请求限制方面都没有那么重要。

我会关注可用性以及比严格关注性能数字更有意义的东西,因为它们应该几乎相同。

底线:使用任何更方便,必要时进行性能测试。

于 2010-02-16T18:13:34.957 回答
2

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

于 2010-02-16T20:09:58.670 回答
2

我知道这并不能完全回答您的问题,但我想分享我的经验。

我有一个 Windows 控制台应用程序,它在计划时调用 IIS 中托管的 WCF 服务。在这种架构中,IIS 实际上是完全没有必要的,它只是整个解决方案的一个附加组件。出于营销原因,它确实包含在解决方案中,以增强产品,而不是出于技术原因。

这些是我面临的主要问题,以及为什么我会出于技术原因避免使用 IIS,这适用于我的经验。请注意:我并不是说在 IIS 中托管 WCF 服务是一个坏主意。我只是从我目前正在开发的产品中给出我的想法。

  1. 在循环中拥有 IIS 意味着在整个解决方案中拥有另一个系统。这反过来又增加了部署的复杂性。一些客户端有 IIS6 其他运行 7。虽然这些差异在表面上可能看起来很小。毫无疑问,它们仍然不同,这意味着如果您将产品部署到不同的客户,您会增加更多的环境差异潜力。不要低估这些差异。我什至有客户尝试在 SharePoint 网站集内运行我的 WCF 服务(呃!),这比您认为的错误要多得多。
  2. IIS 也有一个 AppPool 考虑因素,可能需要根据产品的复杂性进行配置。该 AppPool 需要一个身份才能运行,这再次为您的整体解决方案增加了更多复杂性。
  3. 我遇到了一些问题,单线程服务有时会“有趣”——线程中止消息。虽然我仍在试图找出确切的原因,但在我的脑海中,我真诚地希望这与 IIS 无关。关键是如果我从整体解决方案中消除了 IIS,我就不会考虑这个问题。
  4. 我听说过有关 IIS 是 WCF 服务与自托管相比更强大的托管环境的讨论。我不完全确定这是否有分量。如果您知道自己在做什么,那么您的自托管服务就没有理由不可靠。但我想实现一些在 IIS 中获得的自动功能需要更多的前期工作,例如 WP 回收。
  5. 我对循环中的 IIS 并没有总体上不满意,但是当我将产品交给部署时会很痛苦,并且没有强大技术背景的顾问必须设置 IIS 应用程序。通常有些事情可能而且将会出错,并且需要具有更多技术经验的人介入并解决。如果您是自托管,则可以更轻松地打包您的应用程序以进行部署。
  6. 很抱歉重申,但如果您选择 IIS,您的解决方案中将有 2 个应用程序而不是 1 个,即使您组织的业务方只会将应用程序视为一个业务单位,基本上不了解解决方案的全部复杂性你正在实施。例如:为什么我们有 2 个配置文件?为什么我们必须配置两次邮件?为什么我们必须将 DLL 部署到 2 个位置。这些问题被问了很多。
  7. 最后,我想我会提到,如果您是远程工作或通过 VPN 部署到客户端,情况会变得更糟,有时顾问可以访问您无法访问的敏感区域。作为开发人员,请尝试从您的整体解决方案中消除尽可能多的额外包袱。让我们还提到系统管理员有时可能会发布方便的 IIS 重置,如果您的应用程序与其他应用程序一起托管,他们将重置您的服务。

根据我的经验,更少的系统 = 更少可能出错。但是您需要确定您是否具备实施可靠的自托管服务的技能。这一切又直接关系到开发、部署和维护的成本。

于 2010-02-17T11:37:45.033 回答