一、SOA简介
1. SOA(面向服务架构)既是一种编程方式,也是软件开发的一种架构方法。根据这种架构方法,应用程序是由具有一定行为(称为服务)的功能单元组成的。
2. SOA的基本思想是构建一个粗粒度、松散耦合的系统,在这个系统中,服务的使用者与服务的实现唯一共同拥有的东西,就是公开的服务操作和参数的结构定义。
3. 客户端只知道用来描述服务方法的名称、输入参数类型及返回值类型。
4. SOA架构的技术基础是SOAP标准。SOAP用XML语言来定义一个服务操作所发送和接收消息的内容。该消息是由参数的值或者返回的值形成的,而且这些数据需要转换为SOAP格式。
二、SOA架构的4条原则
1. 边界显式定义
    只能通过调用契约才能执行服务中的逻辑。边界是指服务的公共接口与其内部专用实现之间的界线,边界必须显式定义,是指客户端程序只需要知道服务存在的方法,通过契约调用这些方法即可。
2. 服务是自治的
    服务是不依赖于其它服务行为的独立程序模块。服务必须经过部署,而且每个服务 的版本相互独立。
3. 服务共享的是模式和契约,而不是类
    模式是对服务操作的定义,它以一种独立于平台的方式来描述签名:方法的名称、参数类型和返回值类型。契约是服务的元数据,是服务作为黑盒子的对外接口,模式是对参数结构的定义。
4. 服务的兼容性是基于策略的
    这条原则意味着由服务决定在满足什么条件时才处理消息。为了通过协商确定通信中的元素,如消息的格式,安全性等要求,必须使用策略。策略用来进一步明确服务的语义和客户端对服务行为的期望。
三、服务的内部结构
1.  服务的工作原理
    
    一个服务包含若干个方法,这些方法通过一个通道与服务的使用者建立通信。服务的使用者也使用一个与服务通道相匹配的通道实际的调用服务的方法,向服务发送所需要的数据。一方面,通道是模式、契约和策略的结合;另一方面,通道在运行时就是使用的协议。消息可以在通道中双向传递。通道总是与某一个协议捆绑在一起,定义对服务的访问方式和访问过程。协议(如HTTP或MSMQ)用来传送数据,但需要得到服务实现时所在操作系统的支持(如MSMQ)。通道相当于一个管道,消息在其中流动。客户端把消息放在通道的一端,发布服务的平台所在的宿主栈在另一端读取消息。通道将被绑定由契约定义的模式上。在模式和契约中,如果没有对服务操作的元数据定义,那么通道是不完整的。通道还需要知道服务使用者必须实现的策略。
2.  服务的生态系统
1. 应用程序由服务组成
    这个生态系统的核心是服务,服务是组成模块,由它们构建应用程序。
2. 服务的管理状态
    服务的任务和操作经常把数据持久化的保存在数据库中,之后再从数据库中读取数据。
3. 服务实施策略
    服务有权指定和服务逻辑用法有关的策略。策略描述了服务使用者行为模式的先决条件。可以把策略当作在客户端与服务端通信之前必须达成的协议。绝大多数,它是关于安全的协议。
4. 策略实施操作要求
    通过定义策略,服务可以实施调用平台的操作要求。
5. 服务是由契约绑定的
    只有当描述服务操作签名的契约存在时,服务才存在。这个契约是客户与服务之间达成的约定。契约必须显式定义,并且在运行时要绑定到服务。建立客户端的代理类时,需要这个契约。
6. 契约描述了消息交换模式
    消息交换模式是对消息从一方到另一方传送过程和传送方法的定义。消息交换模式确定了同步还是异步调用服务,决定了是否需要返回结果。消息交换模式可以是:
    请求—响应模式:这是最常用的模式,每个调用都直接返回另一个消息。
    单向模式:服务调用没有返回结果,这种消息可以是异步调用的。
    双向模式:在调用方法的过程中那个,服务操作可以回调给客户端,服务操作在返回最终结果之前,可以向客户端程序请求更多的信息。
    消息交换模式在功能层是可见的,因此开发人员可以实现服务操作。在协议更深的技术层,消息交换模式虽然也存在,但大多数情况下是不可见的。
7. 契约包含模式,而模式定义消息的结构
    模式定义了所操作参数的结构。模式采用XSD文档格式来描述参数。XSD是元数据语言,用来描述传入服务操作的参数和服务操作返回的结果。
8. 服务交换模式是一个消息集
    消息的组合和调用顺序可以用一个更加复杂的交换模式来描述。这样依赖,消息交换模式就可以定义哪个操作必须先调用,哪个操作必须最后调用,以及决定是否定义操作的一个完整工作流。
9. 服务交换消息
    交换消息是服务生态系统的最重要组成部分。交换消息意味着调用一个操作和接受来自此操作的响应。
 
参考书籍:《WCF4高级编程》

[WCF编程]2.SOA概述的更多相关文章

  1. [WCF编程]4.契约概述

    一.契约的基本概念 契约是消息参与者之间的约定.在SOA架构中,契约提供了服务通信所必需的元数据.契约用来定义数据类型,操作,消息交换模式和消息交换使用的传输协议.契约通常是在标准化平台中使用与编程语 ...

  2. [WCF编程]5.绑定概述

    一.绑定概述 WCF提供了一个编程框架,可以抽象化服务创建的复杂过程.绑定允许开发人员将精力集中在问题本身上,而无需考虑如何创建允许系统运行的架构,因为WCF已经创建了架构. 绑定类型是开发人员控制W ...

  3. 【WCF--初入江湖】01 WCF编程概述

    01 WCF编程概述 SOA的优点 1.服务独立于平台和工作环境.服务并不关心自己所处的环境,也不关心与之进行通信的服务所处的    环境. 2.服务相互隔离. 3.服务对协议.格式和传输中立. 4. ...

  4. .Net-WCF-图书:《WCF编程》

    ylbtech-.Net-WCF-图书:<WCF编程> <WCF编程>是2008年1月机械工业出版社出版的图书,作者是Juval Lowy.Clemens Vasters. 1 ...

  5. WCF 编程实验室

    最近由于项目需要,简单研究了一下.NET WCF编程. 首先,简单说下WCF是什么,WCF 本质上,是一种开发框架.它用来开发类似COM+ .WEB SERVICE 这样“远程方法调用” 功能. 普通 ...

  6. WCF编程系列(七)信道及信道工厂

    WCF编程系列(七)信道及信道工厂   信道及信道栈 前面已经提及过,WCF中客户端与服务端的交互都是通过消息来进行的.消息从客户端传送到服务端会经过多个处理动作,在WCF编程模型中,这些动作是按层 ...

  7. WCF编程系列(六)以编程方式配置终结点

    WCF编程系列(六)以编程方式配置终结点   示例一中我们的宿主程序非常简单:只是简单的实例化了一个ServiceHost对象,然后调用open方法来启动服务.而关于终结点的配置我们都是通过配置文件来 ...

  8. WCF编程系列(四)配置文件

    WCF编程系列(四)配置文件   .NET应用程序的配置文件 前述示例中Host项目中的App.config以及Client项目中的App.config称为应用程序配置文件,通过该文件配置可控制程序的 ...

  9. WCF编程系列(五)元数据

    WCF编程系列(五)元数据   示例一中我们使用了scvutil命令自动生成了服务的客户端代理类: svcutil http://localhost:8000/?wsdl /o:FirstServic ...

随机推荐

  1. 大白话讲解Promise(一)

    去年6月份, ES2015正式发布(也就是ES6,ES6是它的乳名),其中Promise被列为正式规范.作为ES6中最重要的特性之一,我们有必要掌握并理解透彻.本文将由浅到深,讲解Promise的基本 ...

  2. SQL Server 变更数据捕获(CDC)

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/字段/对象更改 概述 变更数据捕获用于捕获应用到 SQL Server 表中的插入.更新和删除活动,并以易于使用的关系格式提供这些 ...

  3. Elasticsearch Mantanence Lessons Learned Today

    Today I troubleshooted an Elasticsearch-cluster-down issue. Several lessons were learned: When many ...

  4. padding标准盒模型和怪异盒子模型

    我们都知道padding是为块级元素设置内边距 但是在使用过程中,我们却会遇到一些问题.padding的标准盒模型和怪异盒模型 padding盒子模型 我们通过demo来讲这个问题,用文字干讲第一没意 ...

  5. [大数据之Spark]——快速入门

    本篇文档是介绍如何快速使用spark,首先将会介绍下spark在shell中的交互api,然后展示下如何使用java,scala,python等语言编写应用.可以查看编程指南了解更多的内容. 为了良好 ...

  6. Android开发学习之路-图片颜色获取器开发(1)

    系列第一篇,从简单的开始,一步一步完成这个小项目. 颜色获取就是通过分析图片中的每个像素的颜色,来分析整个图片的主调颜色,有了主调颜色,我们可以用于图片所在卡片的背景或者标题颜色,这样整体感更加强烈. ...

  7. KnockoutJS 3.X API 第七章 其他技术(2) 使用扩展器来增加可观察量(监控属性)

    Knockout observables提供了支持读取/写入值并在值改变时通知订阅者所需的基本功能. 但在某些情况下,您可能希望向可观察者添加其他功能. 这可能包括通过在可观察者前面放置一个可写的计算 ...

  8. 关于SubSonic3.0插件使用Json反序列化获得的实体进行更新操作时,只能执行添加而不能执行修改(编辑)操作的处理

    由于目前开发的项目使用云计算技术,客户端只进行UI与相关事件的功能开发,而所有的计算与处理都放到了服务器端,客户端与数据库没有任何关联,所以服务器端与客户端使用我们自己开发的通讯加密方式进行,而具体的 ...

  9. MySQL的分页优化

    今天下午,帮同事重写了一个MySQL SQL语句,该SQL语句涉及两张表,其中一张表是字典表(需返回一个字段),另一张表是业务表(本身就有150个字段,需全部返回),当然,字段的个数是否合理在这里不予 ...

  10. ORM框架示例及查询测试,上首页修改版(11种框架)

    继上次ORM之殇,我们需要什么样的ORM框架? 整理了11个ORM框架测试示例,通过示例代码和结果,能很容易了解各种框架的特性,优缺点,排名不分先后 EF PDF XCODE CRL NHiberna ...