最近我在工作中一直用到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配置文件。也没有服务托管文件。
区别? 如果你对这两个文件做个对比,你会发现代码是一样的。甚至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。
|
|
来自: 昵称10504424 > 《Wcf》