欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

WebService远程调用技术

程序员文章站 2022-09-07 14:07:44
转载至:https://www.cnblogs.com/taotingkai/p/6694583.html 何为远程调用? 远程调用就是一个系统远程调用另一个系统的服务,已达到获取远程系统的业务数据的目的。 为什么使用? 基于安全性考虑,一般企业不会开放自己的数据库,只能使用远程调用技术。 二、We ......

转载至:https://www.cnblogs.com/taotingkai/p/6694583.html


 

何为远程调用?

  远程调用就是一个系统远程调用另一个系统的服务,已达到获取远程系统的业务数据的目的。

为什么使用?

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

 WebService远程调用技术


二、webservice如何实现远程调用?三要素在其中的作用

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

  (2)wsdl作用:webservice服务端的使用说明书

  (3)soap作用:规范xml标签

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

  

  开发注意事项:

    1.开发webservice的应用需要开发客户端和服务端

    2.发客户端需要参考webservice服务端的使用说明书(wsdl)

  WebService远程调用技术


三、webservice入门程序

  (1)服务端

   第一步:创建sei(service endpoint interface)接口,本质就是java接口

   public interface weatherinterface{

      public string queryweather(string name);

   }

   第二步:创建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;

    }

   }

   第三步:发布服务

    • 用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());

     }

   }

   第四步:测试服务是否发布成功,通过阅读服务端的使用说明书,确定关键元素存在(类/ 方法/参数等),表示服务发布成功

   wsdl阅读方式:从下往上找到server标签,确定bingding属性

 

   注意:

   发布soap1.2服务端

   第一步:在实现类上加上如下注解

   @bindingtype(javax.xml.ws.soap.soapbinding.soap12http_binding)

   第二步:引入第三方插件的jar包(jaxws-ri-2.2.8)

   第三步:重启服务端

 

  (2)客户端(好几种方法实现)

 

   开发步骤:

   第一步:wsimport命令生成客户端代码。

    wsimport -s . http://127.0.0.1:12345/weather?wsdl --------------------------

 

   第二步:创建服务视图,服务视图名的类从service标签的name属性获取

   第三步:通过服务视图获取对应服务实现类的实例,服务实现类的名称从porttype的name属性获取

   第四步:调用查询方法,方法名从operation下的name属性获取

   public class weatherclient{

      main方法{

        //创建服务视图

        weatherinterfaceimplservice wiis = new weatherinterfaceimplservice();

        //获取服务实现类的实例

        string weather = weatherinterfaceimpl.queryweather("北京");

        system.out.println(weather);

      }

   }

  


 

四、webservice优缺点

  优点:

    跨域防火墙,使用http协议,http协议的默认端口是80,防火墙默认是不拦截80端口

    跨平台,使用http和xml,这两个协议都是跨平台

    支持面向对象编程

  缺点:

    webservice使用xml标签传输数据,发送数据时xml标签也必须发送,标签又要遵循soap协议,随之soap协议的完善,标签越来越多,传输效率下降,性能差。


 

五、使用场景

  发布一个服务,客户端类型未知,不考虑性能,建议使用webservice

  服务端已确定使用webservice,客户端无法更改

  不适用场景:

    考虑性能时不建议使用webservice