导读:使用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框架宏观了解的更多相关文章

  1. 微软开源 WCF 分布式服务框架,并入 .NET 基金会项目

    微软北京时间2015.5.20 在其 .NET Foundation GitHub 开源项目页中开放了 WCF 分布式服务框架的代码.WCF突然之间成为一个热门话题,在各大网站上都有不同的报道:dot ...

  2. WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇]

    原文:WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇] 在[上篇]中,我们分别站在消息交换和编程的角度介绍了SOAP Fault和FaultException异常.在服务执行过 ...

  3. 跟我一起学WCF(13)——WCF系列总结

    引言 WCF是微软为了实现SOA的框架,它是对微乳之前多种分布式技术的继承和扩展,这些技术包括Enterprise Service..NET Remoting.XML Web Service.MSMQ ...

  4. Learing WCF Chapter1 WCF Services

    WCF ServicesWCF services are the new distributed boundary in an enterprise application—with an empha ...

  5. ASP.NET MVC+WCF+NHibernate+Autofac 框架组合(一)

    学习了Spring.NET+NHibernate的框架,觉得Spring.NET框架不够轻量,配置来配置去的比较头疼,所以把Spring.NET换成了Autofac框架,同时加入WCF框架整了一个组合 ...

  6. 学习WCF之——wcf程序的创建

    这是我参考的主要资料——wcf学习之旅:http://www.cnblogs.com/artech/archive/2007/02/26/656901.html 首先,如博客上介绍的一样,创建空白的项 ...

  7. 跟我一起学WCF(12)——WCF中Rest服务入门

    一.引言 要将Rest与.NET Framework 3.0配合使用,还需要构建基础架构的一些部件.在.NET Framework 3.5中,WCF在System.ServiceModel.Web组件 ...

  8. 跟我一起学WCF(11)——WCF中队列服务详解

    一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务队列的方法来支持客户端 ...

  9. 跟我一起学WCF(8)——WCF中Session、实例管理详解

    一.引言 由前面几篇博文我们知道,WCF是微软基于SOA建立的一套在分布式环境中各个相对独立的应用进行交流(Communication)的框架,它实现了最新的基于WS-*规范.按照SOA的原则,相对独 ...

随机推荐

  1. 黄聪:如何删除wordpress登录之后wp_footer、wp_head自行加载的Open Sans字体、fonts.googleapis.com连接导致卡死的问题

    有时候在浏览自己的WordPress网站时,发现网页长时间无响应, 卡在正在连接到fonts.googleapis.com ,如下图所示: 查看网页源码时,发现Head里面有如下一段代码: <l ...

  2. fork()详解

    参照: http://blog.csdn.net/jason314/article/details/5640969 http://coolshell.cn/articles/7965.html

  3. UDP程序设计

        UDP是不可靠的连接,广泛应用于各种聊天工具     使用UDP发送的信息,对方不一定会接收到.所有的信息使用数据报的形式发送出去,这就要求客户端要始终等待服务器发送的信息才能进行接收.在Ja ...

  4. Spark读写Hbase中的数据

    def main(args: Array[String]) { val sparkConf = new SparkConf().setMaster("local").setAppN ...

  5. python3-cookbook

    http://python3-cookbook.readthedocs.io/zh_CN/latest/index.html 一般的类找方法,通过MRO找到第一个就停了对吧,可以描述器好像会顺着MRO ...

  6. linux命令(9)设定固定ip

    一.使用命令设置ubuntu的ip地址 1.修改配置文件blacklist.conf禁用IPV6: sudo vi /etc/modprobe.d/blacklist.conf 2.在文档最后添加 b ...

  7. EXISTS、EXCEPT、INTERSECT 运算符

    转:http://www.cnblogs.com/WizardWu/archive/2011/10/01/2197147.html EXISTS运算符 EXISTS 可称之为运算符,有些书称它为关键词 ...

  8. 问对于一个给定的n,怎样才能用最少的步骤将它变到1

    如果n为偶数,则将它除以2,如果n为奇数,则将它加1或者减1.问对于一个给定的n,怎样才能用最少的步骤将它变到1.例如:n= 61n-- 60n/2 30n/2 15n++ 16n/2 8n/2 4n ...

  9. 值不能为 null 或为空。参数名: linkText

    “/”应用程序中的服务器错误. 值不能为 null 或为空.参数名: linkText 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的 ...

  10. 通过 HTTP 头进行 SQL 注入

    在漏洞评估和渗透测试中,确定目标应用程序的输入向量是第一步.有时,当做web应用程序测试时,SQL注入漏洞的测试用例通常局限于特殊的输入向量GET和POST变量.那么对于其他的HTTP头部参数呢?难道 ...