webservice(草稿)
1. 概述
WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
Webservice是被定义用来使不同应用之间通过网络传输数据的一种标准,此标准和具体的语言无关,至于哪种语言提供接口,哪种语言来调用要看项目的需要。
2. 工作原理
1.XML
XML是用来标记数据的(对于XML标签详细介绍,可以参考W3C),因为上面我们说过,webservice不依赖于某一门特定的编程语言。而不同的系统可能是使用不同的编程语言来开发,(如上:项目A使用PHP开发,项目B使用Java开发)所以说就需要一种方式来交换数据,这种方式同样不依赖于某种编程语言,大多数软件都集成了XML标签,因此使用XML格式的数据来实现数据的交换。
2.SOAP
SOAP是一种特殊的协议,用来传输数据。当调用方一旦发现提供Webservice接口的地址,它将会使用SOAP协议和提供Webservice的系统进行连接。
3.WSDL
WSDL用来描述客户端可以调用的接口的规则,所有这些规则定义在WSDL文件中,当有客户端发起调用的时候,Webservice提供方会参考这个WSDL规则来验证数据请求的合法性。
4.UDDI
UDDI列出了那些服务是可以被访问的。当一个系统需要数据的时候,首先它会先查找UDDI,找出从除了自己之外的那些可以获取到自己需要的数据的服务,然后进行链接获取数据。这一点有点类似于DNS的功能。
以上分别介绍了这四项技术在整个Webservice架构中的角色,下面我们将这四项连起来,看一下整个Webservice的架构是如何实现的。
首先,Webservice的提供方会在WSDL文件中新建一些接口的规则,然后将WSDL文件发送给UDDI进行报道注册。服务请求方(也就是调用Webservice接口的一方)会先连接UDDI来查询哪一个提供方有自己需要的数据,找到以后然后连接这个服务提供方,此时和提供方使用SOAP协议进行交互。当服务方收到请求以后,首先会对这个请求进行验证,验证的依据就是先前新建的WSDL规则。验证通过以后服务方会向请求方发送XML格式的数据,此时同样是使用SOAP协议进行交互。当请求方收到XML数据以后,请求方会使用XSD来验证此XML数据的合法性。验证通过以后再进行数据的处理。
整个过程可以用下图反映:
3. 框架选择
Apache CXF是CodehausXFire的第二代产品,目前在不同框架中性能最佳,应该是开发者不错的选择,这与它本身的架构设计不无关系。相比其他框架,CXF具有几个突出的特性:支持JAX-WS、Spring集成、Aegi数据绑定、支持RESTful services、支持WS-*、Apache协议、代码实现简洁。
Apache Axis2是Apache Axis1的第二代产品,架构上也非常不错,关键特性:支持多语言(C/C++)、支持各种规范、可插拔模块化设计、支持热部署等。与CXF相比性能也非常优异。
RESTEasy也许也是个不错的框架!
4. 测试
访问:http://localhost:8080/wstest?wsdl
This XML file does not appear to have any style information associated with it. The document tree is shown below. <!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.4-b01. --> <!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.4-b01. --> <definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ws.pers.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://ws.pers.com/" name="Hello"> <types> <xsd:schema> <xsd:import namespace="http://ws.pers.com/" schemaLocation="http://localhost:8080/wstest?xsd=1"/> </xsd:schema> </types> <message name="sayHi"> <part name="parameters" element="tns:sayHi"/> </message> <message name="sayHiResponse"> <part name="parameters" element="tns:sayHiResponse"/> </message> <message name="sayHiToUser"> <part name="parameters" element="tns:sayHiToUser"/> </message> <message name="sayHiToUserResponse"> <part name="parameters" element="tns:sayHiToUserResponse"/> </message> <message name="SayHiToUserList"> <part name="parameters" element="tns:SayHiToUserList"/> </message> <message name="SayHiToUserListResponse"> <part name="parameters" element="tns:SayHiToUserListResponse"/> </message> <portType name="Hello"> <operation name="sayHi"> <input wsam:Action="http://ws.pers.com/Hello/sayHiRequest" message="tns:sayHi"/> <output wsam:Action="http://ws.pers.com/Hello/sayHiResponse" message="tns:sayHiResponse"/> </operation> <operation name="sayHiToUser"> <input wsam:Action="http://ws.pers.com/Hello/sayHiToUserRequest" message="tns:sayHiToUser"/> <output wsam:Action="http://ws.pers.com/Hello/sayHiToUserResponse" message="tns:sayHiToUserResponse"/> </operation> <operation name="SayHiToUserList"> <input wsam:Action="http://ws.pers.com/Hello/SayHiToUserListRequest" message="tns:SayHiToUserList"/> <output wsam:Action="http://ws.pers.com/Hello/SayHiToUserListResponse" message="tns:SayHiToUserListResponse"/> </operation> </portType> <binding name="HelloImplPortBinding" type="tns:Hello"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <operation name="sayHi"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> <operation name="sayHiToUser"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> <operation name="SayHiToUserList"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="Hello"> <port name="HelloImplPort" binding="tns:HelloImplPortBinding"> <soap:address location="http://localhost:8080/wstest"/> </port> </service> </definitions> |
webservice(草稿)的更多相关文章
- SharePoint WebService 之更新审批状态
SharePoint列表使用WebService操作,可以进行增删改查,但是操作开启审批功能列表的时候,会遇到列表项审批的问题,只要进行修改,该项目就会变成待定状态,然后想要修改审批状态,就使用Upd ...
- webService
什么是webService WebService,顾名思义就是基于Web的服务.它使用Web(HTTP)方式,接收和响应外部系统的某种请求.从而实现远程调用. 1:从WebService的工作模式上 ...
- 开始webservice了
一.WebService到底是什么 一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用 ...
- Spring WebService入门
Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布 ...
- 浅谈跨域以及WebService对跨域的支持
跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问.也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源. 在 ...
- 浅谈WebService的版本兼容性设计
在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...
- Atitit webservice发现机制 WS-Discovery标准的规范attilax总结
Atitit webservice发现机制 WS-Discovery标准的规范attilax总结 1.1. WS-Discovery标准1 1.2. 一.WS-Discovery1 1.2.1. ...
- java调用CXF WebService接口的两种方式
通过http://localhost:7002/card/services/HelloWorld?wsdl访问到xml如下,说明接口写对了. 2.静态调用 // 创建WebService客户端代理工厂 ...
- VS2010编写WebService与在IIS的发布<之简单讲解>
工具VS2010,window环境win7 一:Webservice的创建与方法查看调用 1.新建空web应用程序项目 2.新建web服务 3.自动生成 4.直接跑起来,可以看到有2个方法 5.点击H ...
随机推荐
- 用jstl标签判断一个字符串是否包含了另一个字符串
<c:if test="${fn:contains(str1,str2)}">
- centos7 tomcat9
1.下载 下载 apache-tomcat-9.0.0.M4.tar.gz 文件: wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0 ...
- light oj 1007 Mathematically Hard (欧拉函数)
题目地址:light oj 1007 第一发欧拉函数. 欧拉函数重要性质: 设a为N的质因数.若(N % a == 0 && (N / a) % a == 0) 则有E(N)=E(N ...
- Redis实战总结-配置、持久化、复制
Redis的配置主要放置在redis.conf,可以通过修改配置文件实现Redis许多特性,比如复制,持久化,集群等. redis.conf部分配置详解 # 启动redis,显示加载配置redis.c ...
- 【Python】安装geocoder
C:\Users\horn1\Desktop\python\49-geo>pip install geocoder Collecting geocoder Downloading https:/ ...
- (C++)关于拷贝构造函数 Copy Constructor
题目: In which of the following scenarios is a Copy Constructor called or invoked? A. When no conve ...
- 极域电子教室卸载或安装软件后windows7无法启用触摸板、键盘
我今天在win7上装了个极域电子教室,卸载后重启触摸板,键盘都不能用了?连口令都是用屏幕键盘来输入的.进去后看设备管理器,键盘和触摸板,前面都有黄色的告警,而且就是出现了鼠标代码为10的情况?不过吧鼠 ...
- 加快Android Studio的编译速度
从Eclipse切换到Android Studio后,感觉Android Studio的build速度比Eclipse慢很多,以下几个方法可以提高Android Studio的编译速度 使用Gradl ...
- 【树莓派】服务配置相关2:基于RPi Desktop的服务配置
该文接续之前写过的一篇:[树莓派]服务配置相关. 这是我个人用来进行树莓派盒子安装配置的脚本,对于外部其他博友,可以部分参考,但不需要逐个引用. 现在有一定更新,部分按如下脚本来操作: step1: ...
- 【Ubuntu】Ubuntu bug “Reached target Shutdown”
在使用 Ubuntu-16.04.3-server-amd64.iso 版本(参考官方,iso下载地址)的时候,遇到一个Ubuntu的Bug,后来查了一下,在官方看到,目前还是Unassigned: ...