WCF学习之旅—WCF寄宿前的准备(八)
一、WCF服务应用程序与WCF服务库
我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”。
WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类协定的定义,可以直接看到运行的效果。
WCF服务库,可以认为是一个包含WCF服务以及协定定义的类库。不能直接运行,你可以在其他项目里引用,在宿主里启用托管这个库,有点类似于我们在Web/windows项目中应用的类库。考虑WCF服务设计的时候,服务类的定义为单独的库,可以为其它项目使用。提高代码的复用性。
当然你也可以修改这些代码,比如把WCF服务程序里的类,移到一个单独的类库里,或是把类库里的类移到WCF服务程序中。
二、寄宿概述
通过前面的介绍我们知道,WCF在运行时必寄宿在“宿主程序”之上,WCF本身不能够独自运行(每个WCF服务必须宿主在一个Windows进程中)。.net 提供了多种宿主供WCF运行,WCF还是非常灵活的。
WCF的宿主可以是 Windows 服务、COM+应用程序、WAS(Windows Activation Services,Windows进程激活服务)或IIS、Windows应用程序,或简单的控制台应用程序及任何.net程序。
三、创建WCF服务库为多种寄宿做准备
1) 打开Visual Studio 2015,在菜单上点击文件—>新建—>项目—>WCF服务应用程序。在弹出界面的“名称”对应的文本框中输入“WcfServiceLib”,然后点击“确定”按钮。如下图。
2) 把Visual Studio 2015自动生成的两个文件(IService1.cs、Service1.cs)删除。
3) 鼠标右键查看项目属性。如下图所示。
4) 查看WcfServiceLib项目的引用,我们会发现“WCF类库项目”与我们平时建立的 “类库项目”都是类库,只不过多了WCF的类库项目在新建时多了两个dll的引用(System.ServiceModel.dll、 System.Runtime.Serialization.dll)和一个自动生成的配置文件(该配置文件只用于调试时使用,在WCF寄宿以后会应用宿 主的配置文件与其他应用程序通信)。如下图。
5) 服务端我们还和第一个教程一样(IBookService接口与BookSservice实现),创建IBookService接口。代码如下。
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text;namespace WcfServiceLib {// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IBookService”。 [ServiceContract]public interface IBookService{[OperationContract]string GetBook(string Id);} }
6) 实现IBookService接口,代码如下。
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace WcfServiceLib {// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“BookService”。// 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 BookService.svc 或 BookService.svc.cs,然后开始调试。public class BookService : IBookService{public string GetBook(string Id){int bookId = Convert.ToInt32(Id);Books book = SetBook(bookId);string xml = XMLHelper.ToXML<Books>(book);return xml;}public Books SetBook(int Id){Books book = new Books();book.BookID = Id;book.AuthorID = 1;book.Category = "IBM";book.Price = 39.99M;book.Numberofcopies = 25;book.Name = "DB2数据库性能调整和优";book.PublishDate = new DateTime(2015, 2, 23);return book;}} }
7) 由于Visual Studio 2015默认生成的app.config中的配置信息是以IService来写的配置,现在的为IBookService,所以配置文件有三处要修改.修改。如下图。
修改后的配置文件。
<?xml version="1.0" encoding="utf-8" ?> <configuration><appSettings><add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /></appSettings><system.web><compilation debug="true" /></system.web><!-- 部署服务库项目时,必须将配置文件的内容添加到主机的 app.config 文件中。System.Configuration 不支持库的配置文件。 --><system.serviceModel><services><service name="WcfServiceLib.BookService"><host><baseAddresses><add baseAddress = "http://127.0.0.1:8888/WcfServiceLib/BookService/" /></baseAddresses></host><!-- Service Endpoints --><!-- 除非完全限定,否则地址相对于上面提供的基址--><endpoint address="" binding="basicHttpBinding" contract="WcfServiceLib.IBookService"><!--部署时,应删除或替换下列标识元素,以反映用来运行所部署服务的标识。删除之后,WCF 将自动推断相应标识。--><identity><dns value="localhost"/></identity></endpoint><!-- Metadata Endpoints --><!-- 元数据交换终结点供相应的服务用于向客户端做自我介绍。 --><!-- 此终结点不使用安全绑定,应在部署前确保其安全或将其删除--><endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/></service></services><behaviors><serviceBehaviors><behavior><!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false --><serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/><!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false以避免泄漏异常信息 --><serviceDebug includeExceptionDetailInFaults="False" /></behavior></serviceBehaviors></behaviors></system.serviceModel> </configuration>
8) 在Visual Studio 2015中点击“F5“运行程序。效果如下图所示,则说明成功。
9) 使用鼠标左键,双击GetBook方法,在ID值中输入5,如下图。
10) 在输入完ID值之后,点击,调用按钮,如下图。在出现的提示信息框中点击“确定”按钮。
11) 调用成功的结果。如下图。
WCF学习之旅—WCF寄宿前的准备(八)相关推荐
- WCF学习之旅—WCF服务的WAS寄宿(十二)
上接 WCF学习之旅-WCF服务部署到IIS7.5(九) WCF学习之旅-WCF服务部署到应用程序(十) WCF学习之旅-WCF服务的Windows 服务程序寄宿(十一) 八.WAS宿主 IIS ...
- WCF学习之旅—WCF第二个示例(七)
三.创建客户端应用程序 若要创建客户端应用程序,你将另外添加一个项目,添加对该项目的服务引用,配置数据源,并创建一个用户界面以显示服务中的数据. 在第一个步骤中,你将 Windows 窗体项目添加到解 ...
- WCF学习之旅—WCF概述(四)
一.WCF概述 1) 什么是WCF? Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架.借助 WCF,可以将数据作为异步消息从一个服务终 ...
- WCF学习之旅—第三个示例之四(三十)
上接WCF学习之旅-第三个示例之一(二十七) WCF学习之旅-第三个示例之二(二十八) WCF学习之旅-第三个示例之三(二十九) ...
- WCF学习之旅—基于Fault Contract 的异常处理(十八)
WCF学习之旅-WCF中传统的异常处理(十六) WCF学习之旅-基于ServiceDebug的异常处理(十七) 三.基于Fault Contract 的异常处理 第二个示例是通过定制Servic ...
- WCF学习之旅—第三个示例之二(二十八)
上接WCF学习之旅-第三个示例之一(二十七) 五.在项目BookMgr.Model创建实体类数据 第一步,安装Entity Framework 1) 使用NuGet下载最新版的Entity Fram ...
- WCF学习之旅—实现支持REST客户端应用(二十四)
WCF学习之旅-实现REST服务(二十二) WCF学习之旅-实现支持REST服务端应用(二十三) 在上二篇文章中简单介绍了一下RestFul与WCF支持RestFul所提供的方法,及创建一个支持RES ...
- WCF学习之旅(一)---Hello World.
WCF学习之旅(一)---Hello World. 看了一些关于WCF的资料,从实例入手.记录自己学习WCF的过程. 从最简单的Hello World入门. 下图是我的solution及项目. 项目名 ...
- WCF学习之旅—请求与答复模式和单向模式(十九)
一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答 ...
最新文章
- 2012关于钱的Tips
- 《精通自动化测试框架设计》—第2章 2.3节测试数据交互基本方法
- RMI、Hessian、Burlap、Httpinvoker、WebService的比较
- linux限制pptp连接数_性能调优,让你的服务器更强大!增加TCP连接最大限制
- linux shell 切割文件,linux shell 将文件按照行数以及顺序拆分成多个文件
- python对象的复制问题
- oracle唯一索引能删除吗,Oracle:ora-02429:无法用于删除强制唯一/主键的索引 解决...
- 多线程场景下使用 ArrayList,这几点一定要注意!
- 笔记--Spring in action
- git本地分支和远程分支改名
- VC绘制控件如何防止闪烁
- Oracle数据库索引底层实现原理笔记
- 轻松学会硬盘还原卡的安装和使用
- CentOS7修改主机名称(hostname)总是不成功的原因及解决办法
- Python每日一记179文氏图绘制
- webRTC中语音降噪模块ANS细节详解(三)
- java获取当天是周几
- Visual Studio Code下c语言环境的安装与运行
- 因果,稳定,无源,无损系统(1)
- HTTP协议中的一些概念
热门文章
- 池州天气预报软件测试,池州天气预报15天
- 打印图片预览时图片显示不出来_办公小技巧:深入挖掘实用的Excel打印秘诀
- java怎么获取城市气温_获取城市天气数据
- 4g能达到多少兆_“吃鸡”无敌战神以后,还有其他段位存在吗?最高能达到多少星?...
- 北斗信号服务器解算,GPS/北斗定位解算算法的研究
- 注册后自动登录 php,php – 自动注册后用户身份验证
- weblogic内存溢出linux,解决weblogic内存溢出有关问题
- 郑州大学软件学院 大学生创新创业选拔赛章程
- 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化
- ssm之九 批量导入excel到数据库