系统之间通讯方式—SOAP(web service)
【web service 简介】
是一种新的web应用程序分支,是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。web service是一个应用组件,它逻辑性的为其他应用程序提供数据与服务。各应用程序通过网络协议和规定的一些标准数据格式(HTTP,XML,SOAP)来访问web servcie,通过web servcie内部执行得到所需结果。
web services ,可以将应用程序面向全世界发布,或提供某项功能,web services可以被其他应用程序使用。
【关键技术】
(1)xml:描述数据的标准方法,web servcies使用xml来编解码数据
xml提供了一种可用于不同的平台和编程语言之间的语言。
(2)soap:表述信息交换的协议,web services使用saop来传输数据
soap是一种用于访问web service的协议。
(3)WSDL:web服务描述语言
使用XML编写,用于描述web services、如何访问web services以及用于web services的消息格式和协议的细节语言。
(4)UDDI(Universal Description,Discovery and Integration):通用描述、发现与集成,它是一种独立于平台的,基于xml语言的用于在互联网上描述商务的协议。
用户存储有关web services的信息的目录,经由SOAP进行通讯。
【web service通信】
不管web service用什么工具,什么语言写出来的,只要你用soap协议通过http来调用它,总体结构都一致。
(1)用你喜欢的语言(如VB6或者VB.NET)来构建你的web services,然后用soap Toolkit或者.net的内建来把它暴漏给web客户。
注意:web service一般都是放在web服务器(如:IIS、tomcat)后面的。
(2)任何语言、任务平台上的客户都可以阅读其WSDL文件来调用webservice。
【web service调用过程】
(1)服务器端:生成服务描述文件,以供客户端获取(WSDL)。
(1)客户端:取得服务端得服务描述文件WSDL,解析该文件的内容,了解服务端得服务信息以及调用方式。根据需要,生成恰当的SOAP请求消息(指定调用的方法,已经调用的参数),客户端生成的soap请求会被嵌入在一个HTTP POST请求中,发送到web服务器端。(之后,开始等待服务端返回的SOAP回应消息,解析得到返回值。)
(2)web服务器端收到客户端的HTTP POST(SOAP)请求后,在将这些请求发给web service请求处理器。
(3)web service请求处理器解析收到的soap请求消息,解析其中的方法调用和参数格式。根据WSDL和WSML的描述,调用相应的COM对象来完成制定功能,并把返回值放入SOAP回应消息中,传给web服务器端。
(4)web服务器端得到soap应答后,会再通过HTTP应答的方式把它送回客户端。
【web service 调用实现】
1、高层接口
使用高层接口,不需要知道soap和xml的任何信息,就可以生成和使用一个webservice。soap Toolkit2.0通过提供两个com对象—soapClient和SoapServer,来完成这些功能。
在客户端,只要生成一个soapclient实例,并用WSDL作为参数来调用其中的mossoapinit方法。soapclient对象会自动解析WSDL文件,并在内部生成所有web service的方法和参数信息。之后,你就可以像调用IDispatch接口里的方法一样,调用里面所有的方法。在VB或是脚本语言中,你甚至可以直接在soapclient对象后面直接加上.方法(参数...)进行调用。
2、低层接口
要使用低层接口,你必须对soap和xml有所了解。你可以对soap的处理过程进行控制,特别是要做特殊处理的时候。
在客户端,首先要创建一个HTTPConnector队形,负责HTTP连接。设定connector的一些头部信息,比对EndPoinURL和SoapAction等。如果网络连接需要使用代理服务器,那页要在这里色设定相关的信息。接着创建SoapSerializer对象,用于生成soap消息。按照WSDL里定义,把所有参数按顺序序列化,得到一个完整的soap请求消息。该soap消息,作为payload通过Httpconnector被发送到服务器端。最后,生成一个soapreader对象,负责读取服务器端返回的soap消息,取得其中的返回值。
系统之间通讯方式—SOAP(web service)的更多相关文章
- 翻译-使用Spring调用SOAP Web Service
原文链接: http://spring.io/guides/gs/consuming-web-service/ 调用SOAP web service 本指南将指导你使用Spring调用一个基于SOAP ...
- 翻译-使用Spring WebService生成SOAP Web Service
原文链接:http://spring.io/guides/gs/producing-web-service/ 生成SOAP web service 该指南将带领你使用Spring创建一个基于SOAP的 ...
- PHP soap Web Service 使用SoapDiscovery.class.php 生成wsdl文件
PHP soap web service 使用wsdl文件 demo: ============================================================== 服 ...
- SOAP web service用AFNetWorking实现请求
问: This is my current call to (asmx) SOAP web service: NSString *soapMessage = [NSString stringWithF ...
- REST和SOAP Web Service的区别比较
本文转载自他人的博客,ArcGIS Server 推出了 对 SOAP 和 REST两种接口(用接口类型也许并不准确)类型的支持,本文非常清晰的比较了SOAP和Rest的区别联系! ///////// ...
- Restful 架构方式的 web service
现在公司项目用的apache wink 搭建的web service ,感觉挺好用的.顺便学习一个这种架构方式 . 个人理解apache 实现Restful 架构方式技术有两种,如果有其他新的知识或不 ...
- K8S 容器之间通讯方式
概述 首先k8s里面容器是存在于pod里面的,所以容器之间通讯,一般分为三种类型: 1. pod内部容器之间 2. pod 与 pod 容器之间 3. pod 访问service服务 pod内部容器之 ...
- 容器之间通讯方式\与pod关系
1.概述 k8s里面容器是存在于pod里面的,所以容器之间通讯,一般分为三种类型:1. pod内部容器之间 2. pod 与 pod 容器之间 3. pod 访问service服务 (1) pod内部 ...
- jboss上的soap web service开发示例
以下示例,由jboss quickstart示例代码得来: 一.创建一个常规的dynamic web项目,建议支持maven ,项目的关键属性参考下图: 二.定义服务接口及参数对象 HelloWorl ...
随机推荐
- 关闭mysql慢查询日志
开启mysql慢日志 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查 ...
- window.open()函数
http://hi.baidu.com/gagahjt/blog/item/7b76e0dee61b20aecd11661c.html open函数详解: window.open("sUrl ...
- kernel4.1 ioctl调用
在4.1内核中开发时遇到个奇怪的问题: 用户空间的ioctl无法调用到内核空间的unlock_ioctl 排查源码发现 546 int do_vfs_ioctl(struct file *filp, ...
- Python partition() 方法
描述 Python partition() 方法用来根据指定的分隔符将字符串进行分割. 如果字符串包含指定的分隔符,则返回一个3元的元组,第一个为分隔符前面的子字符串,第二个为分隔符本身,第三个为分隔 ...
- leetcode难度及频率
1 Two Sum 2 5 array sort set Two Pointers 2 Add Two Numbers 3 4 linked l ...
- NHibernate中ISession的Flush
不知道在执行Insert或者Delete,update之后为什么要调用Flush(),后来看了http://www.cnblogs.com/lyj/archive/2008/10/17/1313612 ...
- 如何利用webmin在Linux主机中添加网站
Linux系统因其高效稳定而受到广大用户的推崇与青睐,然后其管理的复杂性也使很多用户望而却步,动弹不得.为了降低 Linux系统的管理难度,更有效方便的使用该系统,我司所有Linux主机或VPS系统均 ...
- GameObject非激活状态,触发测试
测试结果为OnEnable,Start不执行.Awake不管激活未激活都执行 不管是驻留在层级面板,还是手动拖上去. 但是,在任何时间设为激活.就会2个都触发.Awake和Start只触发一次.这个问 ...
- 严重: Dispatcher initialization failed java.lang.RuntimeException: java.lang.reflect.Invoc
错误提示:严重: Dispatcher initialization failed java.lang.RuntimeException: java.lang.reflect.InvocationTa ...
- python学习笔记(8)--爬虫下载占位图片
说明: 1. 虽然很简单,但总忘,所以还是记下来吧! 2. http://placekitten.com/300/300这个画猫的网站老是打开没有图片,改成了http://placehold.it/3 ...