为每个 IIS 应用程序部署单个或多个 WCF 服务?

Posted

技术标签:

【中文标题】为每个 IIS 应用程序部署单个或多个 WCF 服务?【英文标题】:Deploying individual or multiple WCF services per IIS application? 【发布时间】:2013-01-09 18:49:46 【问题描述】:

我正在进行关于 IIS 托管的内部辩论。对于给定的企业应用程序,我们有 N 个 WCF 服务。

一种选择是将每个 WCF 服务托管在其自己的 IIS 应用程序中。这意味着每个服务都有自己的 web.config 和 [可能] 自己的应用程序池。

另一种选择是在一个 IIS 应用程序中使用所有 WCF 服务。这意味着所有这些服务的一个 web.config 和一个应用程序池。

单个选项可以灵活地为每个服务进行不同的配置(IIS 和 web.config)。单独的应用程序池可以更精细地控制重置进程。

共享选项更简单并且可行,因为每个服务的 IIS 和应用程序配置 (web.config) 应该相同。

我正在寻找这两个选项之间的建议\最佳实践。

【问题讨论】:

为多个 WCF 服务共享同一个 web.config 文件的优点是您将能够定义 WCF 服务使用的 serviceBehaviors、endpointBehaviors、自定义绑定等在一个地方,而不是在多个文件中复制和粘贴它们。这并不意味着您应该使用一个 IIS 应用程序来托管数十个 WCF 服务。也许一个好的解决方案是按功能对服务进行分组并创建几个定义明确的 IIS 应用程序。 谢谢托马斯。更清楚地说,在这个场景中,我说的是针对单个企业应用程序的 5 个服务。 这是一个权衡停机时间和易于配置的决定。这不是“最佳实践”类型的问题。这两个方向都有其优点,都不是坏习惯。 话虽如此,作为一般规则,我将所有与相同业务需求相关的服务分组到相同的应用程序和池中。订单服务一起,跟踪服务一起,产品服务一起等等。这样,只有相关的服务会被一起部署或其他问题。 @SeanM 我自己一直在内部辩论这个问题。我选择了我认为最好的选择。似乎应该首选每个服务 1 个应用程序池,因为如果 1 个服务锁定了一个应用程序池或其他什么,其他服务不会受到影响。不过,我不确定这种说法的真实性。 【参考方案1】:

在与您描述的相同类型的企业环境中工作,我们发现最佳实践如下:

    将类似的功能分组到“应用程序”中,然后托管在一个 WCF 服务下。这给了我们例如CustomerService、AccountsService 等。

    每个服务都有自己的应用程序。域赋予它与其他服务的进程分离和安全分离。也就是说,每个服务都在 ActiveDiretory (AD) 帐户的上下文中运行,这样做可以保护下游资源,例如 SQL 服务器数据库。

例如CustomerService 在 DOMAIN\CustomerServiceUser 用户下运行。然后,我们可以保护例如与客户功能相关的存储过程,以便它们只能由 CustomerServiceUser 用户执行。然后,我们可以使用集成安全性来连接到 SQL 服务器。这允许在 Active Directory 级别管理企业权限。

    我们使用脚本来部署 IIS 配置和 web.config 文件。这样做的好处是 IIS 配置也可以保存在源代码管理中,就像我们的 web.config 文件的转换文件一样。然后,我们拥有完整的版本历史记录或我们的配置,如果我们决定复制和负载平衡服务,还可以使用它来快速推出其他机器。

尽管贵组织的要求可能不同,但我们认为这是最佳做法。

【讨论】:

以上是关于为每个 IIS 应用程序部署单个或多个 WCF 服务?的主要内容,如果未能解决你的问题,请参考以下文章

WCF IIS 托管服务由单个服务实现的多个服务合同 - 如何通过配置在端点之间共享 uri

iis部署wcf服务过程

带有消息的零星 WCF 服务激活错误 - 访问 IIS 元数据库时发生错误

如何在 IIS 6.0 上部署我的 WCF 服务?

WCF IIS部署

部署WCF Lib到IIS