1、---------------------------------介绍--------------------------------------------------

(1)远程调用:一个系统远程调用另一个系统的服务,已获取远程系统的业务数据。

(2)为什么使用:基于安全性的考虑,一般企业不会开放自己的数据库,只能使用远程调用技术。

2----------------------- Webservice是如何实现远程调用?三要素在webservice的作用?-----------------------------------

(1)Webservice原理:webservice是一种使用http传输的SOAP协议的数据的远程调用技术。

(2) WSDL作用:webservice服务端的使用说明书。(Web Service Description Language)

(3)SOAP作用:规范XML标签。

(4) UDDI:提供webservice服务端的搜索和注册功能。

注意事项:

  1. 开发webservice的应用需要开发客户端和服务端
  2. 发客户端需要参考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远程调用技术的更多相关文章

  1. C#远程调用技术WebService葵花宝典

    一.课程介绍 直接开门见山吧,在学习之前阿笨想问大家一句,关于WebService远程过程调用技术(RPC) 你真的会了吗?不要跟老夫扯什么WebService技术已经过时,如果你的内心有在偷偷告诉你 ...

  2. C#远程调用技术WebService修炼手册

    一.课程介绍 一位伟大的讲师曾经说过一句话:事物存在即合理!意思就是说:任何存在的事物都有其存在的原因,存在的一切事物都可以找到其存在的理由,我们应当把焦点放在因果关联的本质上.所以在本次分享课开课之 ...

  3. Spring远程调用技术<2>-Hessian和Burlap

    上篇谈到RMI技术,加上Spring的封装,用起来很方便,但也有一些限制 这里的Hessian和Burlap解决了上篇提到的限制,因为他们是基于http的轻量级远程服务. Hessian,和RMI一样 ...

  4. Spring远程调用技术<1>-RMI

    在java中,我们有多种可以使用的远程调用技术 1.远程方法调用(remote method invocation, RMI)  适用场景:不考虑网络限制时(例如防火墙),访问/发布基于java的服务 ...

  5. Java[2] 分布式服务架构之java远程调用技术浅析(转http://www.uml.org.cn/zjjs/201208011.asp)

    转自:http://www.uml.org.cn/zjjs/201208011.asp 在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如: ...

  6. WebService远程调用(命令行调用)

    远程调用webservice 方法, 通过wsdl命令,生成webservice 对应asmx 文件的对应类(cs文件),然后将此cs文件引用到当前项目中,项目其他地方需要调用webservice方法 ...

  7. Spring远程调用技术<3>-Spring的HTTP Invoker

    前面提到RMI使用java标准的对象序列化机制,但是很难穿透防火墙.  另一方面,Hessian和Burlap能很好地穿透防火墙,但是使用私有的对象序列化机制. Spring提供的http invke ...

  8. WebService远程调用(代码调用)

    在做多个系统集成的时候,由于各系统厂商采用不同的架构,在项目实施前期,各业务对业务理解不够深入,系统接口可能会有较多变化, 在此背景下,动态调用webserivce就变得灵活了,降低了系统集成的耦合度 ...

  9. WebService与RMI(远程调用方式实现系统间通信)

    前言 本文是<分布式java应用基础与实践>读书笔记:另外参考了此博客,感觉讲的挺好的,尤其是其中如下内容: 另外,消息方式实现系统间通信本文不涉及.RMI则只采用spring RMI框架 ...

随机推荐

  1. python-day2笔记

    # 1.为何要有操作系统:# 程序员掌握计算机系统所有的细节有很大难度,并且管理这些部件并加以优化使用,是一件极富挑战性的工作,# 于是,计算机安装了一层软件(系统软件),称为操作系统.它的任务就是为 ...

  2. laravel请求到响应的生命周期

    请求到响应的核个执行过程,主要可以归纳为四个阶段,即程序启动准备阶段.请求实例化阶段.请求处理阶段.响应发送和程序终止阶段. public\index.php中有这么一段代码 $app = requi ...

  3. 在js中if条件为null/undefined/0/NaN/""表达式时,统统被解释为false,此外均为true

    Boolean 表达式 一个值为 true 或者 false 的表达式.如果需要,非 Boolean 表达式也可以被转换为 Boolean 值,但是要遵循下列规则: 所有的对象都被当作 true. 当 ...

  4. Linux安装/卸载软件教程

    一.源码安装 ./configure #环境检查.生成makefile make #编译 make install #安装 这三条命令是最经典的Linux软件安装,适用于所有发行版 二.软件包管理工具 ...

  5. 牛客网 PAT 算法历年真题 1008 : 锤子剪刀布 (20)

    锤子剪刀布 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 大家应该都会玩“锤子剪刀布”的游戏:现给出 ...

  6. oracle函数NVL,NVL2和NULLIF之间的区别和使用

    oracle用这么几个函数,可以帮助我们解决数据上null或0的处理 1.NVL()函数 1.1)介绍:NVL(expr1,expr2),若expr1为null, 返回expr2; 不为null,返回 ...

  7. zabbix_server.conf、zabbix_agentd.conf配置文件详解

    zabbix_server.conf配置文件详解 AlertScriptsPath 默认值:/usr/local/share/zabbix/alertscripts 说明:告警脚本目录 AllowRo ...

  8. 线性回归之决定系数(coefficient of determination)

    1. Sum Of Squares Due To Error 对于第i个观察点, 真实数据的Yi与估算出来的Yi-head的之间的差称为第i个residual, SSE 就是所有观察点的residua ...

  9. shell 流程控制语句

    case语句 case $变量名 in "值1")   如果变量的值等于值1,则执行程序1 ;;  "值2")   如果变量的值等于值2,则执行程序2 ;;   ...

  10. Win10系列:JavaScript页内导航

    页内导航是在一个页面内根据需要加载其他页面的内容,在开发基于JavaScript的Windows应用商店应用时,可以使用WinJS.Navigation.navigate函数传递要加载的页面地址并使用 ...