WCF入门3 - 图文 联系客服

发布时间 : 星期二 文章WCF入门3 - 图文更新完毕开始阅读df7133b784868762caaed54d

无废话WCF入门教程三[WCF的宿主]

一、WCF服务应用程序与WCF服务库

我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”。 WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定义,可以直接看到运行的效果。此项目模板基于IIS托管的程序,如本系列的第一节所示。在开发基于IIS托管的WCF服务程序时,比较多见,自学的时候也可以使用这种类型,简单易懂。

WCF服务库,可以认为是一个包含WCF服务以及契约定义的类库。不能直接运行,你可以在其他项目里引用,在宿主里启用托管这个库,有点类似于我们在Web项目中应用的类库。考虑WCF服务设计的时候,服务类的定义为单独的库,可以为其它项目使用。提高代码的复用性。

当然你也可以修改这些代码,比如把WCF服务程序里的类,移到一个单独的类库里,或是把类库里的类移到WCF服务程序中。 二、概述

通过前面的介绍我们知道,WCF在运行时必寄宿在“宿主程序”之上,WCF本身不能够独自运行(每个WCF服务必须宿主在一个Windows进程中)。.net 提供了多种宿主供WCF运行,WCF还是非常灵活的。

WCF的宿主可以是 Windows 服务、COM+应用程序、WAS(Windows Activation Services,Windows进程激活服务)或IIS、Windows应用程序,或简单的控制台应用程序及任何.net程序。

这节的示例我们重新建立WCF类库项目为例做示例,名称为:WCFLibrary,并删除自动生成的两个文件(IService1.cs、Service1.cs)。如下图所示:

鼠标右键查看项目属性。我们发现,其实“WCF类库项目”与我们平时建立的“类库项目”都是类库,只不过多了WCF的类库项目在新建时多了两个dll的引用

(System.ServiceModel.dll、System.Runtime.Serialization.dll)和一个自动生成的配置文件(该配置文件只用于调试时使用,在WCF寄宿以后会应用宿主的配置文件与其他应用程序通信)。这更说明了我们在做分式程序开发的时候与我们平时开发的应用程序没有多大的区别,只要我们在应用程序间通信时“符合WCF的约定”即可。

服务端我们还和第一个教程一样(IUser接口与User实现),只建立一个方法做为我们调用的示例代码如下:

1 //添加引用

2 using System.ServiceModel; 3

4 namespace WCFLibrary 5 {

6 [ServiceContract] 7 interface IUser

8 {

9 [OperationContract]

10 string ShowName(string name); 11 } 12 } 13

14 namespace WCFLibrary 15 {

16 class User : IUser 17 {

18 public string ShowName(string name) 19 {

20 string wcfName = string.Format(\服务,显示姓名:{0}\, name); 21 return wcfName; 22 } 23 } 24 }

由于原来的契约为IService,现在的为IUser,所以配置文件有两处要修改为:

二、IIS宿主

我们在第一节中,把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以依靠IIS来管理宿主进程的生命周期。在开发和使用的过程与Web Service非常相似。 具体请参见本系列的第一节课程。 三、控制台应用程序宿主 建立宿主

(1)在解决方案下新建控制台输出项目 WCFHost_Console。 (2)添加 System.ServiceModel.dll 的引用。 (3)添加 WCF 服务类库(WCFLibrary)的项目引用。 (4)创建宿主程序,代码如下:

1 using System; 2 using WCFLibrary;

3 using System.ServiceModel;

4 using System.ServiceModel.Description; 5

6 namespace WCFHost_Console