一、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寄宿前的准备(八)相关推荐

  1. WCF学习之旅—WCF服务的WAS寄宿(十二)

    上接    WCF学习之旅-WCF服务部署到IIS7.5(九) WCF学习之旅-WCF服务部署到应用程序(十) WCF学习之旅-WCF服务的Windows 服务程序寄宿(十一) 八.WAS宿主 IIS ...

  2. WCF学习之旅—WCF第二个示例(七)

    三.创建客户端应用程序 若要创建客户端应用程序,你将另外添加一个项目,添加对该项目的服务引用,配置数据源,并创建一个用户界面以显示服务中的数据. 在第一个步骤中,你将 Windows 窗体项目添加到解 ...

  3. WCF学习之旅—WCF概述(四)

    一.WCF概述 1) 什么是WCF? Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架.借助 WCF,可以将数据作为异步消息从一个服务终 ...

  4. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅-第三个示例之一(二十七)               WCF学习之旅-第三个示例之二(二十八)              WCF学习之旅-第三个示例之三(二十九)   ...

  5. WCF学习之旅—基于Fault Contract 的异常处理(十八)

       WCF学习之旅-WCF中传统的异常处理(十六) WCF学习之旅-基于ServiceDebug的异常处理(十七) 三.基于Fault Contract 的异常处理 第二个示例是通过定制Servic ...

  6. WCF学习之旅—第三个示例之二(二十八)

    上接WCF学习之旅-第三个示例之一(二十七) 五.在项目BookMgr.Model创建实体类数据 第一步,安装Entity Framework 1)  使用NuGet下载最新版的Entity Fram ...

  7. WCF学习之旅—实现支持REST客户端应用(二十四)

    WCF学习之旅-实现REST服务(二十二) WCF学习之旅-实现支持REST服务端应用(二十三) 在上二篇文章中简单介绍了一下RestFul与WCF支持RestFul所提供的方法,及创建一个支持RES ...

  8. WCF学习之旅(一)---Hello World.

    WCF学习之旅(一)---Hello World. 看了一些关于WCF的资料,从实例入手.记录自己学习WCF的过程. 从最简单的Hello World入门. 下图是我的solution及项目. 项目名 ...

  9. WCF学习之旅—请求与答复模式和单向模式(十九)

    一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答 ...

最新文章

  1. 2012关于钱的Tips
  2. 《精通自动化测试框架设计》—第2章 2.3节测试数据交互基本方法
  3. RMI、Hessian、Burlap、Httpinvoker、WebService的比较
  4. linux限制pptp连接数_性能调优,让你的服务器更强大!增加TCP连接最大限制
  5. linux shell 切割文件,linux shell 将文件按照行数以及顺序拆分成多个文件
  6. python对象的复制问题
  7. oracle唯一索引能删除吗,Oracle:ora-02429:无法用于删除强制唯一/主键的索引 解决...
  8. 多线程场景下使用 ArrayList,这几点一定要注意!
  9. 笔记--Spring in action
  10. git本地分支和远程分支改名
  11. VC绘制控件如何防止闪烁
  12. Oracle数据库索引底层实现原理笔记
  13. 轻松学会硬盘还原卡的安装和使用
  14. CentOS7修改主机名称(hostname)总是不成功的原因及解决办法
  15. Python每日一记179文氏图绘制
  16. webRTC中语音降噪模块ANS细节详解(三)
  17. java获取当天是周几
  18. Visual Studio Code下c语言环境的安装与运行
  19. 因果,稳定,无源,无损系统(1)
  20. HTTP协议中的一些概念

热门文章

  1. 池州天气预报软件测试,池州天气预报15天
  2. 打印图片预览时图片显示不出来_办公小技巧:深入挖掘实用的Excel打印秘诀
  3. java怎么获取城市气温_获取城市天气数据
  4. 4g能达到多少兆_“吃鸡”无敌战神以后,还有其他段位存在吗?最高能达到多少星?...
  5. 北斗信号服务器解算,GPS/北斗定位解算算法的研究
  6. 注册后自动登录 php,php – 自动注册后用户身份验证
  7. weblogic内存溢出linux,解决weblogic内存溢出有关问题
  8. 郑州大学软件学院 大学生创新创业选拔赛章程
  9. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化
  10. ssm之九 批量导入excel到数据库