导读:使用WCF框架爱开发项目也有很长一段时间了,最开始的时候,是理解的不深,所以不写博客进行总结。后来是项目赶,发现需要总结的有很多,一直没有把WCF排上日程,尤其是最近研究EF这一块,更是研究了一些ORM框架的东西,包括Hibernate工作原理等。最后,是因为自己都会了,觉得就先不总结了吧,反正都会。现在,正式总结WCF的第一篇博客,先宏观 介绍一下。
在基本概述中,主要是从书本、网络上查找的一些基本的定义
一、基本概述
【以下内容是从维基百科上搜索的WCF的定义】
Windows Communication Foundation (WCF) is a framework for building service-oriented applications. Using WCF, you can send data as asynchronous messages from one service endpoint to another. A service endpoint can be part of a continuously available service hosted by IIS, or it can be a service hosted in an application. An endpoint can be a client of a service that requests data from a service endpoint. The messages can be as simple as a single character or word sent as XML, or as complex as a stream of binary data.
WCF是一个用于构建面向服务的应用程序框架。使用WCF,你可以从一个服务器端发送一个异步数据信息到另一个服务器端。一个服务器端是IIS连续可用服务托管的一部分,或者说,它是一个应用程序中所承载的一部分。一个服务端点,也可以是一个从服务器端请求信息服务的客户端,这个信息可以是像XML文档一样简单的一个字母、一个单词,也可以是像流一样复杂的二进制数据。
【以下内容是从百度百科上摘抄的,作为自己的一个知识上的补充、明确。】
WCF是Windows平台上开发分布式应用的一个有效的实践方式:简单说来有以下几个部分:
1,网络服务的写物,即用什么网络协议开放客户端的接入;
2,业务服务的协议,即声明服务提供哪些业务;
3,数据库类型声明,记对客户端与服务器端通信的数据部分进行一致化;
4,传输安全性相关的定义。
二、契约介绍
契约一般是作为接口的形式出现,而服务一般是作为接口的实现出现。以下介绍,由VS2012新建一个WCF服务应用程序为例:
【ServiceContract】
在接口Iservice1前面加了[serviceContract],意思是将这个接口和它的实现类声明为服务契约,进行了声明之后,这个接口就可以暴露在客户端面前,也就是说:服务契约,是针对客户端而言,它的效用就是让这个接口对客户端可见。
【OperationContract】
让客户端看见这个接口,和让客户端看见这个方法是不一样的。如果说,想要接口里面的方法也对客户端可见,那么还需要声明方法的签名,在方法签名加上[OperationContract]。如果在方法签名不应用签名,则这个方法对客户端不可见。
总结:服务契约一共有两种:[ServiceContract]声明接口、类对客户端可见;[OperationContract]声明方法对客户端可见。
理解:对于这个服务契约的理解,可以结合做项目调试代码,一个服务端,可以对应多个客户端。比如说:角色管理的服务,角色管理的客户端可以调用,然后组织管理的客户端,也可以调用角色管理的服务。但是,我们很容易发现,在角色管理的客户端,是可以看到角色管理服务端的方法内容,而在组织管理的客户端是看不到代码的。(区分本地发布和IIS发布)但是,这种配置,是可以更改的。
【DataContract】
这个是一个数据契约,跟服务契约一样,声明数据契约,就可以将这个数据类型、结构对客户端可见。而在我们具体的项目中,我们是将这个数据契约分离,做成了我们的Model层和ViewModel层。当我们在客户端调用的时候,是引入的服务端Model或者ViewModel的数据。
【DataMember】
这个也和方法签名[OperationContract]一样,虽然将数据类型或者结构声明了契约服务,但是,类型里面的变量、参数是并不对客户端可见的。要想变量或者参数也对客户端可见,则必须声明[DataMember]。
总结:datamember只能在数据契约中使用,在方法中的变量是不能用datamember的,方法函数必须用servicecontract声明。
理解:虽然我们将数据进行分离到Model层(引入EF),但是,在那里面并不能控制字段的可见性。
三、理解WCF
对于WCF的理解,是和几个十期的师哥师姐沟通之后,才有了一个很大的突破。当时一个师哥跟我说过,WCF可以实现服务的重用,一个WCF服务可以对应多个客户端。刚开始也是不明白的,后来结合自己的学习经验,就对比了以下之前没有WCF的时候,所开发项目的情况:
垒鸡窝—三层—MVC—MVC+EF—MVC+SPring+EF+AOP,虽然一直在不断的提升,但是一直都是一个项目一个解决方案。当我们需要更改的时候,就得下载整个解决方案下来进行维护,然后进行发布打包。这样子其实很不合理,它为什么不合理,分析一下WCF引入之后的框架:WCF+MVC+EF+SPring
现在总体来说,客户端和服务端是分离的,简单说来,也就是业务逻辑和UI显示是分离的。
我们分离出去的服务,可以被多个客户端调用。接口复用、方法复用的更好了。在之前,就拿一个简单的SQLHelper类来说,当我们在机房收费开发的时候,写了一遍,在重构的时候,又写一遍,在新闻发布系统的时候,又写了一遍,每次用到的时候,就又复制粘贴了一遍。更别说其他模块的复用。
之前的复用,是在解决方案内的一个复用,现在WCF的服务复用,面向的范围更大,可以复用的范围更广。
天呐,我要去开会了,先写到这里,下一篇博客介绍一个简单的WCF实例。然后接着介绍配置文件结合spring框架的应用。。。。。。