1.WCF是什么
WCF常和分布式系统以及面向服务(SOA)联系在一起,它可以使分布在不同服务器上的服务之间互相调用,访问。它提供了通信的模型和技术。
2.WCF基本概念
契约:
服务契约:可以看做是接口
数据契约:定义了在通信过程中用到的数据类型
服务:服务契约的实现类
宿主(托管):只有上面的东西,“服务”是不能运行和启动的。上述的契约和服务必须借助一个可执行的程序(Windows窗体应用程序,控制台应用程序等),才能启动服务,供外界调用
客户端:调用服务的一端。
3.WCF基本原理
Service Host:在上图中,左边是客户端,右边是服务端,我们看到在服务端中,服务寄宿在一个一个服务端程序中,当程序执行的时候便是一个进程,来运行服务。
EndPoint:终结点EndPoint包括三部分:ABC。A是服务发布的地址,B规定了通信的方式,是HTTP还是TCP等。C是契约,代表你要用的是哪个服务。
代理服务:客户端程序通过代理服务来访问服务。这里代理服务就是一个中介,实际过程中,客户端先和代理服务创建连接,再由代理服务于服务端创建连接。而不是客户端和服务端直接产生联系。这样,代理服务可以控制不同的客户端对服务端的访问,保证服务端的安全。
4.WCF实践
(1)建立契约和服务
契约和服务的建立很简单(可以简单看做接口,实现类和数据类型的建立)。
a.我们可以借助一定的“帮助”来建立,如在VS中,新建项目选择WCF服务库。
b.如果不需要帮助,我们可以自己新建类库,契约是一个类库,服务是一个类库。
c.还有一种高级的帮助,就是VS中的新建项目下的WCF服务应用程序。它其中有一个.svc文件,并把它设置成起始页,只要F5运行程序。服务就可以执行了。所以,顾名思义WCF服务应用程序不同于WCF服务库,它是可以执行的。通过WCF的客户端测试工具可以直接调用该服务。
这里也注意在建立数据契约和服务契约时用到的两个引用:
using System.Runtime.Serialization; 【DataContract】【DataMember】
using System.ServiceModel;【ServiceContract】【OperationContract】
(2)选择宿主,配置终结点,发布服务
a.IIS
把上述的svc文件发布到IIS上,打开,获得终结点中的地址A,对于IIS这种方式,B只能是HTTP绑定类型。
b.Windows应用程序
(i)在应用程序中引用契约类库和服务类库.
(ii)建立宿主
(iii)配置终结点和元数据(通过代码或配置文件)
如果只配置了终结点,那么客户端发现不了服务,客户端必须引用服务端的契约类库,只有配置了元数据和服务行为,告诉客户端可以发现,怎么发现服务,那么客户端可以不用引用服务端的契约类库。
(iv)运行宿主程序,启动服务
(3)客户端调用
是否需要引用契约类库,根据你的服务端是否配置了元数据和服务行为,如果没有,就得引用。
a.添加服务引用,会自动生成代理类来调用
b.使用svcutil生成文件。
c.通过通道工厂。
5.WCF好处
6.参考资料
《WCF初接触实作 - Higel - 博客园》
《通过SvcUtil.exe生成客户端代码和配置 - cjfwu - 博客园 》
《WCF初接触实作之服务发布和使用》
上述几篇文章的里面有具体的代码,我已经实践过了,如果有什么问题我们可以交流啊。
有了上面的宏观认识和知识储备,接下来就是试着搭建一下我们项目中的WCF,ING……