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. php多线程代码

    <?php$thNum = 20; //20个进程$total = 20000;//总数$pageNum=100;//每个页面显示100条数据 $pageCount = ceil($total/ ...

  2. 安卓——implements——OnClickListener

    //实现底部的按钮激活监听 设置不同src class click implements OnClickListener{ @Override public void onClick(View v) ...

  3. 函数使用七:AUTHORITY_CHECK_RFC

    此函数是用来检查用户使用RFC函数的权限 感觉是个废物,从来没遇到过这么蛋疼的权限设置,以及这么挫的检查... Import USERID                      执行RFC函数的用 ...

  4. ssh -vT git@github.com get “ No such file or directory” 错误

    在"Are you sure you want to continue connnecting"的时候回复y,不要打空格跳过 参考:http://stackoverflow.com ...

  5. Hadoop--单点故障修复

    nameNode单点故障修复 1.启动虚拟机,启动集群  此时我们将主机hadoop1关机(断掉主机),开始抢救: 1.使用 秘书(secondaryNameNode),成功率不是100%  (这里我 ...

  6. ActiveMQ topic 普通订阅和持久订阅

    直观的结果:当生产者向 topic 发送消息, 1. 若不存在持久订阅者和在线的普通订阅者,这个消息不会保存,当普通订阅者上线后,它是收不到消息的. 2. 若存在离线的持久订阅者,broker 会为该 ...

  7. 把旧系统迁移到.Net Core 2.0 日记 (18) --JWT 认证(Json Web Token)

    我们最常用的认证系统是Cookie认证,通常用一般需要人工登录的系统,用户访问授权范围的url时,会自动Redirect到Account/Login,登录后把认证结果存在cookie里. 系统只要找到 ...

  8. android studio 安装步骤

    1◆ jdk环境安装 2◆ android文件下载 3◆ 安装步骤 waiting ---       4◆ 配置   正在安装加速器·····     google setProxy https:/ ...

  9. 在引用的laravel的@include子模板中传递参数

    调用传参: @include("message",['msg'=>'中国']) 在message子模板中调用msg的值: {{msg}}

  10. ROM和RAM区别

    在计算机的组成结构中,有一个很重要的部分,就是存储器.存储器是用来存储程序和数据的部件,对于计算机来说,有了存储器,才有记忆功能,才能保证正常工作.存储器的种类很多,按其用途分为主存储器和辅助存储器, ...