什么是WCF:
可以简单的看成是.NET平台上的新一代的WEB Service。是一种消息通信技术。它是对一些技术的整合如(Enterprise Service,.NET Remoting,XML web service,MSMQ)同时呢,又是顺应了SOA(面向服务编程)的浪潮。
WCF本质上就实现了一个跨进程,跨机器,以至于跨网络的服务调用。
作为一种面向服务的编程:一般我们需要首先来实现服务。然后启动服务,再在客户端来实现服务的调用。
Demol1_CalculatorService:实现计算的服务例子:
一、控制台应用作为服务的宿主(跨进程)
1、 新建空白解决方案:CalculatorService
2、 添加两个liberrary和两个console
其中client:控制台程序是实现作为客户端最终调用服务的进程。Contracts:用来定义服务的契约。Services:提供wcf服务的实现(是用来实现Contracts中的契约的)。
Hosting:服务的宿主控制台程序。
3、 创建契约(Contracts):一般通过接口的形式定义契约,首先引入system.ServiceModel程序集。
然后创建接口,创建完接口和对应的方法之后,我们要将这个接口定义为服务的契约,就需要为接口注明特性(这里采用的自定义特性,我们可以为特性注明名称和命名空间)
4、 实现服务的契约(Services):
首先引入contracts程序集
然后实现契约的方法。
这里有个概念:服务类型:凡是实现了服务契约接口的类都是服务类型。同样那些虽然没有实现服务契约接口但是它被添加了ServiceContract特性的类也叫做服务类型。在例子当中Calculate类就是一个服务类型。
5、 将服务寄宿到进程(自我寄宿)
这里有个概念:服务模型:WCF的服务模型类似于WSDL的服务(服务,绑定,portType),在WCF 的服务模型中就对应包括地址(address)绑定(binging)和契约(contract)他们描述的是服务所在的位置,通过什么协议实现服务通信,以及服务的具体实现内容。同时这三者就构成了一个新的概念:终结点(endpoint)一个服务可以有多个终结点,从而实现将服务内容暴露给潜在的服务消费者。
有两种方法实现服务模型:
代码实现:
(1) 同样引入System.ServiceModel和Contracts和Services三个程序集。
(2) 声明服务对象,并且为该对象添加对应的终结点
(3) 打开该服务。这时服务就可以使用了。
配置文件实现:
(1) 同样引入System.ServiceModel和Contracts和Services三个程序集。
(2)在配置文件中配置services:service的配置包括behaviorConfiguration
和name name的值是指服务所在的位置,同时,service还包括终结点的配置。
(3)配置behavior:包括配置元数据呈现的url
6、 客户端调用服务
当以上实现了服务寄宿到进程之后呢,服务寄宿就将服务通过元数据发布出来,相应的客户端就是通过获取这些元数据进行服务的消费。(在这个过程中,服务开启,并开始监听客户端)
(1) 生成服务代理相关的代码和配置:
这里同样有两种方法生成:
方法一:找到hosting的bin目录下的hosting.exe,然后运行,在在项目中右击client然后add Service Reference,在弹出的框中键入元数据呈现地址:
http://127.0.0.1:9999/calculatorservice/metadata,然后go
命名一个client下的命名空间:然后ok,就会自动生成配置文件和代码。
然后只需要new出代码中自动生成的类,就可以调用服务中的方法了。
方法二:
同样在hosting.exe运行的情况下,在vs的dos窗口内,键入一个命令转到一个固定的位置(方便查找)然后键入命令 svcutil http://127.0.0.1:9999/calculatorservice/metadata/ /out:CalculateService.cs/config:App.config
然后到当前位置查看发现生成了两个文件,在把这两个文件拷如刀项目中去,同样可以使用。
这两种方法本质上都是相同的,通过调用svcutil.exe工具将服务中的元数据转化为客户端能够调用的类和方法,(一种vs集成的(10,08),另一种没有集成(05))。
源代码例子:http://files.cnblogs.com/lxy131/WCF%e5%ad%a6%e4%b9%a0demol1_calculatorService.rar