【发布时间】:2009-09-14 18:08:31
【问题描述】:
WCF 服务库的用途是什么? 我了解,如果您构建 IIS 托管服务,您将创建一个 Web 项目,如果是自托管 - 创建一个 .exe。
将 WCF 用作 DLL 的真实场景是什么?
【问题讨论】:
WCF 服务库的用途是什么? 我了解,如果您构建 IIS 托管服务,您将创建一个 Web 项目,如果是自托管 - 创建一个 .exe。
将 WCF 用作 DLL 的真实场景是什么?
【问题讨论】:
虽然将 WCF 服务创建为类库确实为您提供了更大的灵活性,但这种灵活性是有代价的,并且假设更灵活的解决方案始终是首选解决方案或不太灵活的解决方案是错误的幼稚或仅适用于“简单的教学目的”。
绝大多数 WCF 服务都作为 Web 服务托管,永远不会以任何其他方式部署。
以下是使用 WCF 服务应用程序相对于 WCF 类库的三个优点:
如果您将 Web 服务创建为类库,则配置文件将是 app.config 文件而不是 web.config 文件。 App.config 文件本身并不支持多个配置文件,并且 config 会像 web.config 文件那样进行转换。如果您想对您的 app.config 文件进行配置转换,您必须使用第三方解决方案,例如 Slow Cheetah。
当需要发布您的站点时,如果您使用 WCF 服务应用程序,您可以充分利用 Web Deploy (http://www.iis.net/downloads/microsoft/web-deploy),它是一种将解决方案发布到 IIS 的强大而灵活的方式。
如果您决定自动化构建和部署以实现与 TFS 的持续集成,那么您一定会想要自动化发布您的服务。如果您使用 WCF 服务,您可以配置 TFS 以运行 Web Deploy,它将根据目标构建配置合并您的 web.config 文件,执行增量发布,在服务器上启用无需管理员权限的发布以及其他好处。如果您使用 WCF 类库,那么您将不得不编写自定义工作流解决方案来合并 app.config 文件,使用 xCopy 进行部署,并且通常很难实现自动化部署。
总而言之,更灵活的解决方案通常是以失去特定工具支持为代价的。如果像大多数 WCF 服务解决方案一样,您的应用程序将始终托管在 IIS 中,您可以考虑通过使用 WCF 服务应用程序而不是 WCF 类库来利用此支持。
【讨论】:
我会总是将 WCF 库创建为类库 - 它更易于使用。然后,您可以完全灵活地在 IIS 中托管 WCF 服务(通过在其中提供虚拟目录和 .svc 文件),或者您可以编写自己的自托管 EXE 并从中引用类库中的 WCF 服务。
将 WCF 服务直接放入 Web 项目似乎是一个非常糟糕的主意,并且可能仅对非常简单的教学目的有用 - 只是为了说明如何开始。我永远不会为“实时”系统这样做。
马克
【讨论】:
“WCF 服务应用程序”本身就是一个 直接 Web 服务应用程序依赖 关于 WCF 技术(类似于 ASP.NET Web 服务开发)。 另一个是“WCF 服务库” hand 是一个编译的组件,它可以 部署为 Web 服务或 Windows 服务,甚至作为 Windows 服务的一部分 定制的托管应用程序。
- Developing a WCF Service Library and Hosting it as a WCF Web Service
【讨论】: