这个系列的博客由WCF4 高级编程学习记录,如有错误请指正。

首先介绍一些概念:

SOA: (Service-Oriented Architecture 面向服务架构),一种架构方法,也是一种编程模式。SOA架构允许用户一定的方式组织分布是应用程序。SOA基本思想就是构建一个松耦合的系统,SOA构架的技术基础是SOAP标准。

SOAP:(Simple Object Access Protocol 简单对象访问协议),交换数据的一种协议,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议。使用XML语言来定义一个服务操作所发送和接收消息的内容。一个SOAP包含一个消息头(可选)和一个消息体(必须),消息头与业务无关,消息体包含有用数据。

XSD: 指XML结构定义 ( XML Schemas Definition )

WS-* Protocols:WS-*是一系列标准协议,他们规定了使用分布式消息传递时如何实现某个需求和行为;描述了如何通过SOAP头元素实现安全、可靠、事务性的消息交换等。

WSDL:对契约的XML格式的定义,包括服务接口的元数据,函数名称、参数名称、数据类型、函数返回值类型等。WSDL文档主要作用就是按跨平台方式定义契约,因为它是按照XML格式定义的。

SOAP架构的原则:

    • 1. 边界显示定义:服务运行时所处的进程和内存空间必须独立于引用服务的客户端程序所在的进程和内存空间,客户端通过地址访问服务。通俗的讲:客户端和服务运行在完全不同的两个地方,服务告诉客户端地址。
    • 2. 服务自动化: 服务是不依赖其他服务的行为的独立程序模块。服务之间没有任何耦合,且每个服务的不同版本相互独立。
    • 3. 服务共享的是模式和契约,而不是实现类:模式是对服务操作的定义,它以独立于平台的方式来描述签名。契约是服务的元数据,是服务作为黑盒的对外接口。我的理解是:客户端和服务共享的只有接口,而不是具体的实现类。
    • 4. 基于策略的服务兼容性: 也就是说服务决定在满足一定条件的情况下才能处理客户端发送的消息。如消息的格式和对安全方面的要求,必须使用策略。

服务的生态系统:

SOA服务生态系统组成示意图

  • 1. 应用程序由服务组成:整个系统的核心就是服务,由服务组成的模块构建起完整的应用程序。
  • 2. 服务的状态管理: 服务的任务和操作就是持久化数据和读取数据。
  • 3. 服务的实施策略:服务幽泉制定与服务逻辑有关的策略,策略定义了服务使用者行为模式的先决条件。该策略大多数是安全方面的协议。
  • 4. 策略实施操作要求:客户端必须实施某种安全策略才能调用服务。
  • 5. 服务是由契约绑定的: 当服务描述的操作签名存在时,服务才存在。契约显示定义,并且在运行时要绑定到服务。
  • 6. 契约定义了消息交换模式:消息交换模式分为三种:

1. 请求-相应模式: 最常见的模式,每次调用都返回消息。

2. 单向模式: 服务没有返回结构,可以异步调用。

3. 双向模式: 服务和客户端可以项目调用。

  • 7. 契约包含模式,而模式定义消息的结构: 模式采用XSD文档格式来描述参数。XSD用来描述传入服务操作的参数和返回的结果。
  • 8. 消息交换模式是一个消息集: 消息的组合和调用顺序可以用一个更加复杂的交换模式来描述。消息交换模式定义哪个操作先调用,哪个操作后调用。
  • 9. 服务交换信息: 交换信息意味着调用一个操作和接收来自此操作的相应。交换信息也就是,一个消息把客户端的输入参数传输给服务,另一个消息把相应传送给调用者。

这篇文章介绍了基本的SOA程序的构成部分和服务在SOA程序中的作用,下一篇文章介绍WCF的基础内容。

WCF 学习系列——WCF的学习基础的更多相关文章

  1. Python学习系列(二)(基础知识)

    Python基础语法 Python学习系列(一)(基础入门) 对于任何一门语言的学习,学语法是最枯燥无味的,但又不得不学,基础概念较繁琐,本文将不多涉及概念解释,用例子进行相关解析,适当与C语言对比, ...

  2. 《Python爬虫学习系列教程》学习笔记

    http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己 ...

  3. 【深度学习系列】迁移学习Transfer Learning

    在前面的文章中,我们通常是拿到一个任务,譬如图像分类.识别等,搜集好数据后就开始直接用模型进行训练,但是现实情况中,由于设备的局限性.时间的紧迫性等导致我们无法从头开始训练,迭代一两百万次来收敛模型, ...

  4. Python学习系列(一)(基础入门)

    Python入门 本系列为Python学习相关笔记整理所得,IT人,多学无害,多多探索,激发学习兴趣,开拓思维,不求高大上,只求懂点皮毛,作为知识储备,不至于落后太远.如果兴趣学习者,推荐一个基础视频 ...

  5. Python 学习系列----第一章:基础知识

    1.1 常量-----不能改变它的值 1.2 数 在Python 中数可以分为整数.浮点数和复数. PS:在Python中不用区分'long int'类型.默认的整数类型可以任意长.(译者注:长度应该 ...

  6. 【Spring源码深度解析学习系列】容器的基础XmlBeanFactory(二)

    一.配置文件封装 Spring的配置文件读取是通过ClassPathResource进行封装的,如new ClassPathResource("test.xml"),那么Class ...

  7. [jQuery学习系列五 ]5-Jquery学习五-表单验证

    前言最近总是有一个感觉,虽然这些东西都自己学习并一个案例一个案例的去验证过了.但是总觉得不写成博客记录下来这些都不是自己的东西(心理作用,哈哈).所以每当学习或者复习相关的知识我都喜欢记录下来,下面开 ...

  8. Nodejs全站开发学习系列 & 深入浅出Node学习笔记 & Spider抓取

    https://course.tianmaying.com/node 这个系列的文章看起来很不错,值得学习一下. /Users/baidu/Documents/Data/Interview/Web-S ...

  9. [jQuery学习系列二 ]2-JQuery学习二-数组操作

    前言 上一篇内容 已经对于Jquery 有了一些认识, 包括Jquery的选择器和DOM对象, 那么这一篇继续来看下Jquery中很实用的Jquery对于数组的操作. Jquery中对数组的操作大致有 ...

随机推荐

  1. os.environ模块

    os.environ是用来获取当前操作系统的一些基本信息的模块 import osos.environ.setdefault("DJANGO_SETTINGS_MODULE", & ...

  2. SpringBoot+Mybatis+MySql 自动生成代码 自动分页

    一.配置文件 <!-- 通用mapper --> <dependency> <groupId>tk.mybatis</groupId> <arti ...

  3. 02_四大组件之Activity

    四大组件之Activity 1. 理论概述 1.1 Activity的理解 Servlet的理解回顾 狭义 Servlet是一个interface,我们的Servlet类都必须是此接口的实现类 广义 ...

  4. Inno Setup 检测已安装的.NET Framework 版本

    翻译自:http://kynosarges.org/DotNetVersion.html 由 Jordan Russell 写的 Inno Setup 是一个伟大的安装脚本程序,但缺乏一个内置的函数来 ...

  5. Js学习03--数据类型

    一.数据类型 1.Js中常用的数据类型 简单数据类型 Number 数字类型 String   字符串类型 Boolean  布尔类型 Undefined  变量未初始化 Null  空类型 复杂数据 ...

  6. python 协程池和pool.map用法

    一.问题描述 现在有一段代码,需要扫描一个网段内的ip地址,是否可以ping通. 执行起来效率太慢,需要使用协程. #!/usr/bin/env python # -*- coding: utf-8 ...

  7. Unity3D 跨平台原理

    Unity3D的跨平台原理核心在于对指令集CIL(通用中间语言)的应用. 机理 首先需要知道,Unity中的Mono是基于 通用语言架构(Common Language Infrastructure, ...

  8. 【转】webpack4安装过程遇到的问题及处理方法

    随便百度一下,安装使用webpack的教程铺天盖地,安装一步步来,最后的最后打包没反应......,浪费了不少的时间. 这里我要提醒一下,如果安装webpack1,2,3按照百度上的教程应该不会有问题 ...

  9. 2.8_Database Interface ADO由来

    OLE-DB,它无法广为流行,因为如下两点: 1.由于OLE-DB太底层化,使用上非常复杂,需要程序员拥有高潮的技巧. 2.OLEDB标准的API是C++API,只能供C++语言调用. 为了使得流行的 ...

  10. PreparedStatement和批处理

    1.概述 PreparedStatement 接口继承了 Statement,并与之在两方面有所不同,它表示预编译的 SQL 语句对象. 首先,数据库会对预编译语句提供性能优化.因为预编译语句有可能被 ...