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. oracle 12c新特性 FETCH FIRST、WITH TIES 关键字详解

    几乎都是官方文档上的内容.     [ OFFSET offset { ROW | ROWS} ] [ FETCH { FIRST | NEXT }[ { rowcount | percent PER ...

  2. 【Python】基础知识

    一.基本概念 1.变量与运算符 Python允许给多个变量同时赋值,等号 (=) 右边的值将赋予左边对应位置的变量. # 将a, b, c的值依次赋予b, c, a b, c, a = a, b, c ...

  3. Pick-up sticks

    Pick-up sticks Stan has n sticks of various length. He throws them one at a time on the floor in a r ...

  4. pandas dataframe 过滤——apply最灵活!!!

    按照某特定string字段长度过滤: import pandas as pd df = pd.read_csv('filex.csv') df['A'] = df['A'].astype('str') ...

  5. CentOS 7使用yum安装SNMP教程

    一.安装SMNP yum install -y net-snmp net-snmp-utils 可以理解为net-snmp是服务端,net-snmp-utils是客户端工具集:如果机器上只需要搭建服务 ...

  6. 有多个.h引用时,不能有using namespace std

    #include<iostream.h> #include<math.h> //using namespace std; 有多个.h引用时,不能有这个,否则无法运行. void ...

  7. day15-python常用内置模块的使用

    在日常的开发工作中,我们要写很多的python代码,如果都写在一个文件中,会导致代码特别难维护,为了拓展代码的可维护性,我们把函写在不同的文件里,这样每个文件包含的文件就比较少,逻辑更加清楚.在pyt ...

  8. 【原创】QString 函数 replace()indexOf()、 lastindexOf()

    1.替换函数 示例: QString x = "Say yes!"; QString y = "no"; x.replace(, , y); // x == & ...

  9. Java四个常用正则表达

     1.查询   以下是代码片段: String str="abc efg ABC";String regEx="a|f"; //表示a或fPattern p=P ...

  10. 四:(之一和之二) docker架构和底层技术分析(C/S架构)

    1.架构和底层技术 Docker Host提供了RESTUL api,使docker client可以通过这些命令调用dockerd. Registry是一个公用的存储镜像的容器,类似于github. ...