【WCF 1】WCF框架宏观了解
导读:使用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框架的应用。。。。。。
【WCF 1】WCF框架宏观了解的更多相关文章
- 微软开源 WCF 分布式服务框架,并入 .NET 基金会项目
微软北京时间2015.5.20 在其 .NET Foundation GitHub 开源项目页中开放了 WCF 分布式服务框架的代码.WCF突然之间成为一个热门话题,在各大网站上都有不同的报道:dot ...
- WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇]
原文:WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇] 在[上篇]中,我们分别站在消息交换和编程的角度介绍了SOAP Fault和FaultException异常.在服务执行过 ...
- 跟我一起学WCF(13)——WCF系列总结
引言 WCF是微软为了实现SOA的框架,它是对微乳之前多种分布式技术的继承和扩展,这些技术包括Enterprise Service..NET Remoting.XML Web Service.MSMQ ...
- Learing WCF Chapter1 WCF Services
WCF ServicesWCF services are the new distributed boundary in an enterprise application—with an empha ...
- ASP.NET MVC+WCF+NHibernate+Autofac 框架组合(一)
学习了Spring.NET+NHibernate的框架,觉得Spring.NET框架不够轻量,配置来配置去的比较头疼,所以把Spring.NET换成了Autofac框架,同时加入WCF框架整了一个组合 ...
- 学习WCF之——wcf程序的创建
这是我参考的主要资料——wcf学习之旅:http://www.cnblogs.com/artech/archive/2007/02/26/656901.html 首先,如博客上介绍的一样,创建空白的项 ...
- 跟我一起学WCF(12)——WCF中Rest服务入门
一.引言 要将Rest与.NET Framework 3.0配合使用,还需要构建基础架构的一些部件.在.NET Framework 3.5中,WCF在System.ServiceModel.Web组件 ...
- 跟我一起学WCF(11)——WCF中队列服务详解
一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务队列的方法来支持客户端 ...
- 跟我一起学WCF(8)——WCF中Session、实例管理详解
一.引言 由前面几篇博文我们知道,WCF是微软基于SOA建立的一套在分布式环境中各个相对独立的应用进行交流(Communication)的框架,它实现了最新的基于WS-*规范.按照SOA的原则,相对独 ...
随机推荐
- [ Iptables ] Linux开启防火墙,切记仔细确定每个端口
一.缘由: 祸起Redis未授权访问漏洞被利用,删除了服务器的所有账号,导致无法登陆:这才不得不把开启防火墙提上日程.再次在开启防火墙过程中,一刀切造成了一些前段进程的端口被封,甚是后悔! 二.解决办 ...
- linux 命令(1)screen
一.screen的安装和用法 Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器,这意味着你能够使用一个单一的终端窗口运行多终端的应用. Screen中有会话的概念,用户可以在一个s ...
- andriod_入门一
[小技巧] 1.背景图片文件名不能以数字开头,必须以字母开头. 2.如果按钮被背景图被遮住,可以在relativelayout里拖动控件,把背景拖到最上方: [异常] 1. 在用LinearLayou ...
- SmtpClient 类
1, SmtpClient 类 http://www.cnblogs.com/panlijiao/archive/2012/11/14/2773836.html
- linux中deb怎样安装
deb是Debian Linux的安装格式,跟Red Hat的rpm非常相似,最基本的安装命令是:dpkg -i file.debdpkg 是Debian Package的简写,是为Debian 专门 ...
- Java多线程之阻塞I/O如何中断
阻塞的I/O线程在关闭线程时并不会被打断,需要关闭资源才能打断. 1.执行socketInput.close();阻塞可中断.2.执行System.in.close();阻塞没有中断. package ...
- Python进阶03 模块
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们之前看到了函数和对象.从本质上来说,它们都是为了更好的组织已经有的程序,以方便 ...
- FBI传授9秘诀:如何看穿对方在撒谎 z
第1招:不提及自身和姓名 美国赫特福德郡大学的心理学家韦斯曼说,〝人们在说谎时会本能地把自己从他们所说的谎言中剔除出去〞.所以如果你向某人提问时,他们总是反覆地省略〝我〞,他们就有被怀疑的理由了.反过 ...
- Bitbucket使用方法
一.软件及SSH keys: 由于我的Bitbucket账号的邮箱及用户名与Github相同,所以SSH Public Keys可以用Github的,登录Bitbucket,悬浮在用户名boliqua ...
- android github
Action Bars ActionBarSherlock Extended ActionBar FadingActionBar GlassActionBar v7 appcompat library ...