最近由于项目需要,简单研究了一下.NET WCF编程。
首先,简单说下WCF是什么,WCF 本质上,是一种开发框架。它用来开发类似COM+ 、WEB SERVICE 这样“远程方法调用” 功能。
普通情况想,一个进程中,A模块调用B模块的方法。
有了COM+ 、Webservice 这些,可以实现A进程 调用 B进程的方法。 更好的是,A,B可以不在同一个机器上。WCF就用来开发这样的“功能”
WCF 比 COM+ WebService 灵活,(高效不知道,没有实际案例测试)
- 能在http\tcp\pipe\msmq 之间灵活切换。
- 可以注入到应用程序、windows服务、web服务中。(以webservice为例,它似乎只能在web容器中发挥作用。wcf 可以以一个exe为宿主。)
我打算从一个简单的例子开始,分别用http 和 tcp 来实现。
我自己开发过程总结了一下大致以下步骤
- 编写类库,定义契约
- 编写宿主
- 配置宿主
- 引用服务
- 编写客户端
其中,3,4 步骤有很强的关联关系。
下面我就用VS2013 .net framework 4 来实现一个简单的基于http协议的WCF
我们此次目标是 实现,提供加法运算、 问候语功能的服务,宿主我们用一个控制台(要改IIS 或者 windows服务,我们后面会涉及到)
1 编写类库
首先,用C#语言新建一个类库工程
处理一些基本的命名规范
添加 Sysmte.ServiceModel程序集
同时添加 using System.ServiceModel;
接着,需要定义契约和接口,代码和注释如下
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; namespace WCF_Simple_Lib { //1 先编写这样的代码,表示一个服务契约。关于它的细节我们以后再研究 [ServiceContract] //2 定义一个接口, public interface IWCF_Simple { //3 这个接口要求实现一个Add加法,为了让这个方法被远程调用,需要[OperationContract] // 同样的,关于它的细节我们以后研究 [OperationContract] int Add(int x,int y); //4 每个对外的接口都需要加入OperationContract约束 [OperationContract] String Hello(String yourName); } //5 实现这个接口 public class WCF_Simple_Impress:IWCF_Simple { public int Add(int x,int y) { return x+y; } public String Hello(String yourName) { return String.Format("Hello! {0}",yourName);; } } public class WCF_Simple1_Lib { } }
编译,得到 WCF_Simple_Lib.dll,第一步结束
2,编写宿主
再新建一个控制台工程,同时引用System.ServiceModel 程序集 和 我们在第一个步骤中编译得到的WCF_Simple_Lib.dll
添加一个应用程序配置文件 App.config
然后生成一下。这样加载类库,为一步做准备。
继续下一步,最后输入访问host的http地址。
VS 自动填写好APP.CONFIG的内容
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <services> <service name="WCF_Simple_Lib.WCF_Simple_Impress"> <endpoint address="http://127.0.0.1:8090/wcfsimplehost" binding="basicHttpBinding" bindingConfiguration="" contract="WCF_Simple_Lib.IWCF_Simple" /> </service> </services> </system.serviceModel> </configuration>
事实上到这一步,这个服务已经配置完了。但是,如果仅仅这样配置,我们无法引用这个服务。所以还有一些工作要做。