01WCF概述与快速上手
一、WCF概述(为什么要学习WCF?)
1. WCF的概念:(Windows Communication Foundation:通信框架)是基于微软.NET平台编写分布式应用的统一编程模型。
2. .NET平台下,常见的有三种分布式技术:
【1】 webservice 基于http协议的soap模式(ASP.NET中用过)。
【2】 remoting 也是一种分布式架构技术,常常用于tcp模式的二进制传输。
【3】 MSMQ 这是一种分布式的离线式技术,用于业务解耦。
分布式技术太多,使用不方便,需要整合,WCF应运而生!因此,WCF本质就是对上面技术的再次封装。
二、快速搭建一个WCF程序(基本步骤)
1. 添加一个普通的控制台程序:01_MyFirstWCF
2. 添加“新建项”,找到“WCF服务”模板,取名为“TeachService”
3. 观察生成的项目内容:
(1)自动添加了接口:将WCF服务命名为TeachService,系统自动生成ITeachService接口,并自动实现接口,并特别注意:
在接口类上添加了 [ServiceContract]特性,表示这个接口类遵循WCF协定。
接口方法上自动添加 [OperationContract]特性,表示这个方法是服务协定的一部分。
只有添加了以上特性,才保证接口被WCF运行时获取到。将接口方法改成:string GetCourseName(int courseId)并实现具体的接口内容:
(2)观察和定义配置文件:App.config
WCF服务添加后,在App.config中所有的定义都应该在 system.serviceModel这个配置节点下面。
在这里我们对其他节点,先忽略,重点观察下面的节点:
基于WCF实现客户端和服务端通信,必须了解ABC的概念:
A: Address【地址】:表示在哪里(where)?服务的地址就像我们访问web的时候,有一个地址。对于Http来说有http://myserver/myservice;对于Tcp,地址:net.tcp://myserver:8080/myservice
B: Binding 【绑定】: 表示怎么做(How)?就是我们Client和Service的通道,比如说我们访问web,我们使用http通道。那么wcf支持哪些通道? BasicHttpBinding [WSHttpBinding], NetTcpBinding,netMSMQBinding.
C:Contract【契约】:表示内容是什么(Content)?也就是我们定义的接口是什么样的参数、返回值、接口名称等。
特别注意:
<service name="_01_MyFirstWCF. ITeachService ">节点下:
address里面的值如果为空的话,以下面的节点为准:
这个节点的具体值,可以自己设定,比如设置如下:
(3)承载WCF服务:
谁能够承载?也就是说宿主是谁?宿主:IIS、Console、Winform等都宿主。下面示例用Console项目为宿主:
运行测试,测试成功!
如果以上启动出现下面的错误:
修改方法:一定要获取管理员权限。右键点击“VS2015”选择“以管理员权限运行,否则会出现上面的错误!
关闭控制台,直接找到exe文件启动服务!如果还是出现以上错误,请右键点击exe文件,以管理员身份运行即可。
(4)创建Client客户端程序,使用WCF服务。
【1】创建可执行的客户端控制台程序01_TestClientApp。
【2】添加服务引用,把配置文件中的地址(baseAddress节点的值)复制进去,找到服务引用。修改命名空间:MyWCFService,然后确定。
点击确定后,观察App.config配置文件,已经添加了对wcf服务的引用。
【3】在Main方法中使用服务(和webservice相同)调用方法后,效果如下:
以上效果请参考代码: