WebService远程调用技术
1、---------------------------------介绍--------------------------------------------------
(1)远程调用:一个系统远程调用另一个系统的服务,已获取远程系统的业务数据。
(2)为什么使用:基于安全性的考虑,一般企业不会开放自己的数据库,只能使用远程调用技术。

2----------------------- Webservice是如何实现远程调用?三要素在webservice的作用?-----------------------------------
(1)Webservice原理:webservice是一种使用http传输的SOAP协议的数据的远程调用技术。
(2) WSDL作用:webservice服务端的使用说明书。(Web Service Description Language)
(3)SOAP作用:规范XML标签。
(4) UDDI:提供webservice服务端的搜索和注册功能。
注意事项:
- 开发webservice的应用需要开发客户端和服务端
- 发客户端需要参考webservice服务端的使用说明书(WSDL)

3----------------------------Webservice入门程序--------------------------------------------------
(1) 服务端
第一步:创建SEI(Service Endpoint Interface)接口,本质就是Java接口
public interface WeatherInterface {
public String queryWeather(String Name);
}
l 第二步:创建SEI实现类
- 在类上加入注解:@WebService
- 该注解表示该类是一个webservice的服务类,要发布该类下public方法
@WebService
public class WeatherInterfaceImpl implements WeatherInterface {
@Override
public String queryWeather(String Name) {
System.out.println("from client..."+Name);
String weather = "晴";
return weather;
}
}
l 第三步:发布服务
- 用Endpoint类的publish方法发布服务
- 方法publish两个参数:1.服务地址;2.服务实现类的实现
public class WeatherServer {
public static void main(String[] args) {
//用Endpoint类的publish方法发布服务
//端口号建议不要太短,容易被系统占用;不要太长,太长不支持
Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherInterfaceImpl());
}
}
l第四步:测试服务是否发布成功,通过阅读服务端的使用说明书,确定关键元素存在(类/方法/参数等),表示服务发布成功
- WSDL地址规则:服务地址+?wsdl
- WSDL地址的阅读方式:从下往上找到service标签,确定binding属性
注意:
发布SOAP1.2服务端
l第一步:在实现类上加入如下注解
@BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
l第二步:引入第三方插件的jar包(jaxws-ri-2.2.8)
第三步:重新启动服务端
(2)客户端(好几种方法实现)
开发步骤:
第一步:wsimport命令生成客户端代码。
wsimport -s . http://127.0.0.1:12345/weather?wsdl --------------------------如果你的开发工具是IDEA可以直接使用工具,里面有,可以百度一下。
第二步:创建服务视图,服务视图名的类从service标签的name属性获取
第三步:通过服务视图获取对应服务实现类的实例,服务实现类的名称从portType的name属性获取
第四步:调用查询方法,方法名从operation下的name属性获取
public class WeatherClient {
public static void main(String[] args) {
//创建服务视图
WeatherInterfaceImplService weatherInterfaceImplService = new WeatherInterfaceImplService();
//获取服务实现类的实例
String weather = weatherInterfaceImpl.queryWeather("北京");
System.out.println(weather);
}
}
5-------------------------- Webservice优缺点--------------------------
优点:
- 跨越防火墙,使用http协议,http协议的默认端口是80,防火墙默认是不拦截80端口
- 跨平台,使用http和XML,这两个协议都是跨平台的
- Webservice支持面向对象编程
缺点:
- Webservice使用XML标签传输数据,发送数据时XML标签也必须发送,标签又要遵循SOAP协议,随着SOAP协议的完善,标签越来越多,传输效率下降,性能差
6----------------------------使用------------------------------------
适用场景:
- 发布一个服务,客户端类型未知,不考虑性能,建议使用webservice
- 服务端已确定使用webservice,客户端无法更改
不适用场景:
- 考虑性能时不建议使用webservice
WebService远程调用技术的更多相关文章
- C#远程调用技术WebService葵花宝典
一.课程介绍 直接开门见山吧,在学习之前阿笨想问大家一句,关于WebService远程过程调用技术(RPC) 你真的会了吗?不要跟老夫扯什么WebService技术已经过时,如果你的内心有在偷偷告诉你 ...
- C#远程调用技术WebService修炼手册
一.课程介绍 一位伟大的讲师曾经说过一句话:事物存在即合理!意思就是说:任何存在的事物都有其存在的原因,存在的一切事物都可以找到其存在的理由,我们应当把焦点放在因果关联的本质上.所以在本次分享课开课之 ...
- Spring远程调用技术<2>-Hessian和Burlap
上篇谈到RMI技术,加上Spring的封装,用起来很方便,但也有一些限制 这里的Hessian和Burlap解决了上篇提到的限制,因为他们是基于http的轻量级远程服务. Hessian,和RMI一样 ...
- Spring远程调用技术<1>-RMI
在java中,我们有多种可以使用的远程调用技术 1.远程方法调用(remote method invocation, RMI) 适用场景:不考虑网络限制时(例如防火墙),访问/发布基于java的服务 ...
- Java[2] 分布式服务架构之java远程调用技术浅析(转http://www.uml.org.cn/zjjs/201208011.asp)
转自:http://www.uml.org.cn/zjjs/201208011.asp 在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如: ...
- WebService远程调用(命令行调用)
远程调用webservice 方法, 通过wsdl命令,生成webservice 对应asmx 文件的对应类(cs文件),然后将此cs文件引用到当前项目中,项目其他地方需要调用webservice方法 ...
- Spring远程调用技术<3>-Spring的HTTP Invoker
前面提到RMI使用java标准的对象序列化机制,但是很难穿透防火墙. 另一方面,Hessian和Burlap能很好地穿透防火墙,但是使用私有的对象序列化机制. Spring提供的http invke ...
- WebService远程调用(代码调用)
在做多个系统集成的时候,由于各系统厂商采用不同的架构,在项目实施前期,各业务对业务理解不够深入,系统接口可能会有较多变化, 在此背景下,动态调用webserivce就变得灵活了,降低了系统集成的耦合度 ...
- WebService与RMI(远程调用方式实现系统间通信)
前言 本文是<分布式java应用基础与实践>读书笔记:另外参考了此博客,感觉讲的挺好的,尤其是其中如下内容: 另外,消息方式实现系统间通信本文不涉及.RMI则只采用spring RMI框架 ...
随机推荐
- 小程序setData修改数组某一项的值
官方文档是这样的: changeItemInArray: function() { // you can use this way to modify a danamic data path this ...
- vuex状态持久化
npm install vuex-persistedstate 在store.js里 import createPersistedState from 'vuex-persistedstate' co ...
- 在js中if条件为null/undefined/0/NaN/""表达式时,统统被解释为false,此外均为true
Boolean 表达式 一个值为 true 或者 false 的表达式.如果需要,非 Boolean 表达式也可以被转换为 Boolean 值,但是要遵循下列规则: 所有的对象都被当作 true. 当 ...
- 【转】MVC form提交实体接收参数时空字符串值变成null
问题:entity.BZ的值是null,Request.Form["BZ"]的值是空字符串 目标:让entity.BZ的值是空字符串. 解决方法:在实体的BZ属性上加上 [Disp ...
- provider和consumer配置参数的优先级
<dubbo:service>和<dubbo:reference>存在一些相同的参数,例如:timeout,retries等,那么哪个配置的优先级高呢? consumer合并u ...
- vue 父组件通过props向子组件传递数据/方法的方式
参考网址:https://segmentfault.com/a/1190000010507616 下面栗子中, callback是传递父组件的方法, mutationName是传递父组件的数据, Ap ...
- Utf-8+Bom编码导致的读取数据部分异常问题
项目中经常会有这种场景,在配置文件中配置对应关系,项目启动的时候从中读取数据存入map缓存起来,这样使用的时候就可以直接从map找到对应的映射关系. 然后遇到了这么一个诡异的问题,一个简单的映射关系如 ...
- toolTip(用svg制作出富有动态的对话框)
昨晚看了用svg如何制作富有动态的tooltip,于是今天就心血来潮学着做一下,于是也成功做出来,也明白其中的原理,收获颇多阿!接下来要多去学习svg,这是个好东西. 这其中也注意了一些平时纠结的细节 ...
- laravel中使一段文字,限制长度,并且超出部分使用指定内容代替
{{str_limit($post->content,100,'....')}} 文字内容超出100个字,就用省略号显示
- nginx在linux上的安装与配置详解(一)
Nginx的安装与配置详解 (1)nginx简介 nginx概念: Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like ...