【翻译】WCF Service Application和WCF Service Library的区别
2012-09-12 21:45 imyang 阅读(3009) 评论(0) 编辑 收藏 举报最近我在工作中一直用到WCF。一个困惑点就是应该选择哪种类型的工程:WCF Service Application 还是 WCF Service Library。让我们分别看一下,然后检查不同点。希望我们可以总结出一些在不同场景使用的结论。
The WCF Service Application 模板
你在Visual Studio的”添加新项目”对话框中创建WCF Service Application
结果是这样子的:
它的结构和web应用程序很相似,这绝不是巧合。WCF服务的特殊性在于,你拥有服务契约(IService1.cs)、服务实现 (Service1.svc.cs)和web配置文件(web.config)。另外,还有服务托管文件(Service1.svc)。
The WCF Service Library 模板
和Service Application template一样,你可以再Visual Studio的” 添加新项目”对话框里创建WCF Service Library
它会生成一个树形结构如下所示:
和WCF Service Application工程类似,一个服务类库拥有服务契约和服务实现。有app.config文件,而不是web.config配置文件。也没有服务托管文件。
关于app.config文件,MSDN的描述是这样:
Visual Studio的配置是,当它使用 WCF 服务主机 (WcfSvcHost.exe)运行时将 App.config 文件识别为项目的配置文件,这是默认配置。
区别?
如果你对这两个文件做个对比,你会发现代码是一样的。甚至Service Application的web.config和Service Library的app.config也几乎一样(只看<system.serviceModel>节点)。另外,两个工程在编译时都会生成dll文件
或许能区分的最好方法是运行每个工程
首先,运行WCF Service Application,它会像其他web应用一样,给我们"Debugging Not Enabled"的提示:
继续点击,你会看到默认的目录清单:
点击Service1.svc这个托管文件可以看到真正的服务:
正如我们所预料到的,服务应用程序的运行就像其他web应用一样,实际上,它默认是被ASP.NET部署服务器所托管的:
备注:有一点困惑的是,当运行WCF Service Application(非Service Library)时,我也看到了WCFSvcHost给出的提示
原来是在Service Library工程的选项中设置:
去掉勾选,当我运行了工程中的另外一个工程时,WcfSvcHost不会再出来了。
最后的总结
好了,现在我们运行了一下WCF Service Library,看看会发生什么。它不是被development server托管,而是WCF Test Client
为什么是这样子?因为Service Library 工程默认是没有服务托管文件或者web.config文件的。你可以通过增加这些文件来实现,但是这跟创建WCF Service Application没什么区别了,对吗?
让我们回到最开始的问题,不管是选择服务应用还是类库,你仍然需要一个.svc的托管文件(你得为服务类库手动创建),你仍然需要把<system.serviceModel>配置从WCF工程中移到web或者app配置文件中,并且也需要codebehind文件或者dll文件
我能想到唯一使用WCF Service Library的理由就是你想使用一些非IIS的工具进行WCF托管文件,比如windows service。
本文翻译自