SOA 设计原则和 Web 服务中的数据传输
SOA 被翻译为面向服务架构,它应该是创建从自治服务生成系统的一个架构方法,它的目的是更方便地进行集成。
SOA是Web 服务的一个自然延伸,因为Web 服务只是解决了异构系统之间的互操作,并没有降低Web 服务之间的耦合度。
而关于SOA,有太多关于这个名词的阐述和其他新鲜名词:SCA、SDO、ESB等,本文要讨论的是什么是服务、面向服务架构的设计原则和Web 服务中的数据传输。
什么是服务?
简单来说就是一个提供消息交换交互、满足特定功能的程序而已。它具有可用性和稳定性,同时也是松耦合的。服务长期存在,但是服务的配置和聚合必须能适应变化。
如何设计服务?
无他,把 OO 设计准则拿到 Web 服务领域而已,John Evdemon 在这篇文章(http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnbda/html/SOADesign.asp)里面谈到SOA的设计原则,中文在这里(http://www.microsoft.com/china/msdn/library/architecture/architecture/architecturetopic/SOADesign.mspx)。
有以下四个设计原则:
一:边界清楚(Boundaries Are Explicit)
通过WSDL发布服务协定(流程和数据形式)、使用消息传递而不是RPC调用、提供结构良好的公共接口并保持静态。
二: 自治(Services Are Autonomous)
服务的部署和版本变迁应该要独立于服务的部署和使用者、服务发布后接口即不可更改,做为服务提供者,要预料到服务有可能被误用或者服务的使用者出现问题。
三: 共享架构和协定而非类(Services Share Schema and Contract, Not Class)
采用 XML 架构定义消息交换格式、采用 WSDL 定义消息交换模式、采用 Web 服务策略(WS-Policy) 定义功能和需求、采用BPEL(Business Process Execution Language,业务流程执行语言)做为业务流程级别的协定,以聚合多个服务。
四: 服务兼容性基于策略(Service Compatibility Is Based Upon Policy)
策略表达式可用于分隔化兼容性性和语义兼容性。WS-Policy 规范定义了一个能够表达服务级策略的机器可读的策略框架。关于WS-Policy的介绍,请参见:http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnglobspec/html/ws-policy.asp
中文在这里(http://www.microsoft.com/china/MSDN/library/WebServices/WebServices/Usdnglobspecwspolicy.mspx)
采用何种格式在 Web 服务中传输数据?
在选择传递数据所使用的机制上,有以下几种方法可供选择:DataSet、类型化DataSet、自定义集合、普通 XML 文件
类型化DataSet只是在通用DataSet上增加了一些附加功能,还应该属于DataSet,可以被认为是一种格式。
DataSet:
使用它的理由有:可以把任何数据源的数据整合在一起进行传递;
支持序列化,可以方便地和文本流进行转换;在.NET 2.0 中,连DataTable都开始支持序列化;
在.NET中对DataSet进行操作也比较简便,开发工作量也比较小。
而不应该在Web服务中采用DataSet的理由是:
Web服务的设计目的是用来解决异构系统之间的数据通信问题的,数据就是以消息的形式在服务之间进行传递。而将一个其它服务或系统无法理解的DataSet放在Web服务中传输,是否已经违背了Web服务设计时的初衷?
题外话:.NET 2.0 中增加了SerializationFormat.Binary,是否助长了这种风潮?是否有更多的开发者在应该使用.NET Remoting的场合“过度使用”了Web服务?
直接使用DataSet的WriteXML方法和ReadXML方法来转换XML不采用其它措施的话,XML文件中会包含大量的架构信息,占用了宝贵的带宽资源;
自定义集合:
最大限度的支持自定义,可解决DataSet的隐式数据转换和效率问题,但是需要额外的代码来实现数据的访问并需要实现ISerializable接口来支持序列化,可能开发的工作量是最大的。
普通XML文件:
可以直接进行传输,需要编写解析程序将数据提取出来。
如果使用Web服务的目的仅仅是为了穿透防火墙,不考虑异构系统直接的通讯的话,采用DataSet可能是比较好的方案。
如果性能是首先要考虑的问题,应该会采用自定义集合。
如果异构系统之间通讯的话,肯定应该采用普通XML文件。
转载于:https://www.cnblogs.com/xlzhu/archive/2006/04/07/369641.html
SOA 设计原则和 Web 服务中的数据传输相关推荐
- 设计高可用Web服务
转载请注明出处:设计高可用Web服务 高可用的设计可以说是web服务架构的目标,如果服务达不到高可用,万一出现故障将会对产品带来重大的负面影响.高可用的架构就是能够让服务在任何情况下都能正常响应,比如 ...
- 用WSE在Web服务中验证用户身份
一.Web服务安全与WS-Security 毫无疑问,SOAP和XML Web服务在交互操作和标准上已经完全改变了电子商务领域的格局. 然而直到最近,在Web服务技术领域仍然存在着一些缺陷,那就是处理 ...
- python restful django_如何使用Django / Python从RESTful Web服务中使用XML?
我应该使用PyXML还是标准库中的内容? 解决方法: ElementTree是标准Python库的一部分. ElementTree是纯python,而cElementTree是更快的C实现: # Tr ...
- rest web服务_在WildFly的REST Web服务中与Jackson的双向关系
rest web服务 这是使用Jackson的REST Web服务中Java实体之间的双向关系的示例. 假设我们在两个实体Parent和Child之间存在双向关系. 使用MySQL工作台为这两个表生成 ...
- jax-rs jax-ws_通过JAX-WS Provider在Web服务中利用MOXy
jax-rs jax-ws 在以前的文章中,我演示了如何将EclipseLink JAXB(MOXy)直接集成到WebLogic(从12.1.1开始)和GlassFish(从3.1.2开始)的JAX- ...
- 在WildFly的REST Web服务中与Jackson的双向关系
这是使用Jackson的REST Web服务中Java实体之间的双向关系的示例. 假设我们在两个实体Parent和Child之间存在双向关系. 使用MySQL工作台为这两个表生成SQL模式文件. DR ...
- 通过JAX-WS Provider在Web服务中利用MOXy
在先前的文章中,我演示了如何将EclipseLink JAXB(MOXy)直接集成到WebLogic(从12.1.1开始)和GlassFish(从3.1.2开始)的JAX-WS实现中 . 在本文中,我 ...
- Web服务中延时对QoE(体验质量)的影响
S. Egger等人在论文<WAITING TIMES IN QUALITY OF EXPERIENCE FOR WEB BASED SERVICES>中,研究了Web服务中延时对主观感受 ...
- 数据仓库中宽表的设计原则_实际项目中交互设计原则的运用
在实际项目中设计交互行为方式的时候,我们该怎么去运用的这些交互设计原则呢? 通常我们在设计过程中,会提到设计要满足一定的交互设计原则,而对于一名交互设计师来说,原则是在设计过程中遵循的一种大众认可的, ...
最新文章
- 国内IT出版社的四大软肋
- java有点_JAVA 有点儿冷
- python 链表两数相加
- HighNewTech:2019.08.08鲲鹏开发入门暨 2019华为云鲲鹏开发者大赛参赛攻略
- Oracle12g添加c##scott用户
- markdown语法十步学习 图文并茂
- jsp 中forward 和 Redirect 的用法区别
- 数据挖掘、生信、meta?临床医生如何选择
- java aws s3_java操作AWS S3一些坑记录
- 牛客题霸 [ 	调整数组顺序使奇数位于偶数前面] C++题解/答案
- centos8 挂载ntfs_CentOS 8 挂载NTFS系统磁盘方案
- 【Linux使用】Centos 7设置时区与时钟(chrony / ntp /systemd)
- matlab中bitget函数用法_MATLAB基础函数命令
- Blend学习(2) 从对象创建控件
- qt 右键显示设置界面 后台运行_1.1安装Qt
- YOLO: Real-Time Object Detection 遇到的问题
- Numpy系列(六)常用的数组合并操作
- 星岚技术 Win10 x64 装机版 V2021.5【带驱动包】
- Anylogic模型搭建01:医院排队挂号模拟试验
- 《商务与经济统计》练习:案例2-1:Pelican商店促销活动效果评估
热门文章
- 华为设备不会配置静态路由怎么办?
- 为什么说 Serverless 引领云的下一个十年?
- 重磅!阿里巴巴开源首个边缘计算云原生项目 OpenYurt
- 农行计算机安全制度,制度体系之农行 数据中心计算机安全检查实施细则.doc
- java匿名启动线程_用java实现匿名内部类启动线程
- rapter求n的阶乘流程图_RAPTOR程序设计例题参考答案
- java代码怎样连接es,Elasticsearch 连接ES的两种方式
- DeepLearning:环境配置(cuda+cudnn)
- Python的生成器(generator)
- 全球及中国甲苯二异氰酸酯预聚物行业投资状况与前景建议研究报告2022版