【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的原则,相对独 ...
随机推荐
- 黄聪:TinyMCE 4 增强 添加样式、按钮、字体、下拉菜单和弹出式窗口
我最喜欢 WordPress 3.9 的更新是使用了 TinyMCE 4.0 编辑器.新的 TinyMCE 看起来看起来更整洁(真正匹配WP仪表板),它有一些非常不错的附加功能.我的很多老主题和插件必 ...
- mvc 权限管理 demo
http://blog.csdn.net/zht666/article/details/8529646 new http://www.cnblogs.com/fengxing/archive/2012 ...
- 如何写出小而清晰的函数?(JS 版)
本文以 JavaScript 为例,介绍了该如何优化函数,使函数清晰易读,且更加高效稳定. 软件的复杂度一直在持续增长.代码质量对于保证应用的可靠性.易扩展性非常重要. 然而,几乎每一个开发者,包括我 ...
- JAVA if条件语句,switch多分支结构,与逻辑运算符
一.if条件语句 示例: import java.util.Scanner; public class Test{ public static void main(String[] args){ Sc ...
- Apache Thrift学习之二(基础及原理)
Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.本文将从 Java 开发人员角度详细介绍 Apache Thrift 的架构.开发和部署,并且 ...
- emacs设置代理访问插件仓库
下面这个配置适合ss (setq url-gateway-method 'socks)(setq socks-server '("Default server" "127 ...
- angularJs的ui-router总结
一:跑通ui-router. ui-router源码在最后面 跑通后的样子: 这个不解释了,都是很基本的东西. 二:切换视图: 这里的name可以不写,但是你得放到state的第一个参数里. 跑起来后 ...
- 使用spring的邮件发送功能
使用spring提供的MailSender和JavaMailSender类. 1.邮件对象类 package cn.luxh.app.mail; import java.util.List; impo ...
- ormlite性能对比
看了一下现在的android设备,性能都不差,就懒得直接用sqlite,直接上ORM框架把,上网搜了一圈,觉得androrm, ormlite 这两个不错,当然,还有点别的,这里就不多做介绍,竟然说明 ...
- 监控RAC中的临时表空间
it is from metalink:Note:465840.1 1>Monitor the temp space allocation to make sure each instance ...