公司用到了Powerbuilder+Webserice的技术,能将数据窗口中对数据库的请求,以SQL语句的形式,发到Webservice中,然后由Webservice完成对数据库的请求,并将结果返回给PB客户端。这样的形式,对于我这个原来只知道用Powerbuilder开发C/S程序的人来说,就像打了一针强心针。通过这样的方式,抛开程序的执行效率和开发效率不说,就是PB代码中的随处可见的SQL语句,以及对事务控制的语句commit,rollback等等,都不见了,对事务管理都交给了Webservice,这样,我们在维护PB代码的时候,轻松了很多,同时也可以将部分的业务逻辑丢到Webservice这个中间层中来处理,让我们的客户端瘦起来。

可是我用到的只一个封装好的函数,对内部的处理一无所只,pb是如何与webservice通信的呢?

1.Webservice

  从字面上来翻译Web服务,网络服务,一个发布在网络上的程序,照这么说,Tomcat应该也算是个Webservice,因为他也是一个发布在网络上的程序,说道Tomcat,我们就知道,他处理的是http协议,接受请求,返回相应;不过,这里说的Webserice是指能将自己的组件发布在网络上供客户端调用,中间的传输对客户端是透明的,不过典型的还是Http协议,http协议只是承载数据的,做为方法的调用,客户端必须知道,服务端有哪些方法发布在网络上,这个方法有些什么参数,参数的类型是什么(整形?字符?对象),这个方法返回的类型是什么?而做为服务端必须要知道客户端调用的是哪个方法,传递了哪些参数?要描述这部分数据,必须也要一个协议,这就是我们说的SOAP(简单对象传输协议)。当然要描述这样的信息并不只是SOAP协议,还有其它的协议比如(Rest Style),书上题到的,也没见过,我觉得完全也可以自己写。

客户端通过soap的包讲我们需要请求的数据加工成soap包消息,发送给服务端,服务端解析soap消息,进行相应的处理,讲响应的消息同样加工成soap包,作为响应返回给客户端。

那么我们来建立一个webservice吧

  1. package ch01.ts; // time server
  2.  
  3. import javax.jws.WebService;
  4. import javax.jws.WebMethod;
  5. import javax.jws.soap.SOAPBinding;
  6. import javax.jws.soap.SOAPBinding.Style;
  7.  
  8. /**
  9. * The annotation @WebService signals that this is the
  10. * SEI (Service Endpoint Interface). @WebMethod signals
  11. * that each method is a service operation.
  12. *
  13. * The @SOAPBinding annotation impacts the under-the-hood
  14. * construction of the service contract, the WSDL
  15. * (Web Services Definition Language) document. Style.RPC
  16. * simplifies the contract and makes deployment easier.
  17. */
  18. @WebService
  19. @SOAPBinding(style = Style.RPC) // more on this later
  20. public interface TimeServer {
  21. @WebMethod String getTimeAsString();
  22. @WebMethod long getTimeAsElapsed();
  23. }
  24.  
  25. package ch01.ts;
  26.  
  27. import java.util.Date;
  28. import javax.jws.WebService;
  29.  
  30. /**
  31. * The @WebService property endpointInterface links the
  32. * SIB (this class) to the SEI (ch01.ts.TimeServer).
  33. * Note that the method implementations are not annotated
  34. * as @WebMethods.
  35. */
  36. @WebService(endpointInterface = "ch01.ts.TimeServer")
  37. public class TimeServerImpl implements TimeServer {
  38. public String getTimeAsString() { return new Date().toString(); }
  39. public long getTimeAsElapsed() { return new Date().getTime(); }
  40. }

服务端的接口,以及实现类

  1. public class TimeServerPublisher {
  2. public static void main(String[ ] args) {
  3. // 1st argument is the publication URL
  4. // 2nd argument is an SIB instance
  5. Endpoint.publish("http://127.0.0.1:9876/ts", new TimeServerImpl());
  6. }
  7. }

这个类将实现的服务发布在网络上,我们通过
% java ch01.ts.TimeServerPublisher,运行发布程序

我们就可以通过http://127.0.0.1:9876/ts?wsdl,就可以到描述整个服务的wsdl文件了,我们的客户端,利用soap的组件或者是包,解析这个wsdl文件,就能自动生成访问我们webservice服务的相关方法。

2.PowerBuilder客户端

 当服务发布成功以后,就可以通过客户端发送对服务端的请求了,由于我现在用熟悉的工具是是Powerbuilder,因此我用Powerbuilder来建立一个客户端。

进入webservice向导

输入发布的webserice的wsdl文件的地址

这样Pb会没反应,但是,直接填写用浏览器另存为的xml的wsdl文件,确能一切正常,这是怎么回事?

SIB(Service Implementation Bean)已经出现在界面中了,一路Next,最后形成了Project,

 
 
deploy以后形成一个timeserverimplPort对象,这个对象根据wsdl文件形成,包含了webserice对象的方法,我们就能够根据这个对象与服务端进行通讯了,而又管soap消息是如何封装的,我们不用去管,只管调用对象中的方法就行。
 
接下来就能够更具客户端的webservice对象进行编程了
  1. soapConnection conn //Define SoapConnection
  2. timeserverimplport lts_port
  3. int li_rVal
  4. string ls_time
  5. conn = create SoapConnection
  6. li_rVal = conn.CreateInstance(lts_port, "timeserverimplport") /*实例化*/
  7. try
  8. ls_time= lts_port.gettimeasstring( )
  9. // Invoke service
  10. messagebox("", ls_time)
  11. catch ( SoapException e )
  12. messagebox ("ErrDAT* d or", "Cannot invoke Web service")
  13. // error handling
  14. end try
  15. destroy conn

运行程序,消息弹出,已经得到了服务端得相应。
这就是一个webserce的基本的雏形,有关实现的细节,比如soap的消息是如何封装的,服务端是如何对客户端发送过来的请求如何解析的,这些都还不清楚;还需要多多看书,多多了解,先这样吧。
 
 
 

Webservice初接触的更多相关文章

  1. 初接触BurpLoader工具

    初接触burp工具 菜鸟一枚,现在在接触一段时间测试,我在测试功能性的时候,想着网站被黑案例那么多,我是不是也应该弄弄安全性测试了,所以就有了下边的第一次接触BurpLoader工具来测试手机的app ...

  2. 软工实践练习-Git初接触

    第一次听到Git,有点不知所云,听了实践课老师的讲解,才明白了Git作为最先进的分布式版本控制系统的重要性. 至于Git的安装和使用仍旧是自己摸索着去完成了,当然在这过程中也是遇到了很多的问题. 接下 ...

  3. vi初接触

    vi初接触 它有三种模式: 一 一般模式 二 编辑模式 三 命令行模式 介绍几种比较常用的吧 -- 退出:q 写入:w 强制:! (以上可叠加) 显示行号:set nu 取消:set nonu 跳转到 ...

  4. ExtJS初接触 —— 了解 Ext Core

    ExtJS初接触 —— 了解 Ext Core Ext Core是一款和jQuery媲美的轻型JS库,基于MIT许可.对于Dom的操作,我个人还是比较喜欢用jQuery.当然如果项目中用的是ExtJS ...

  5. ExtJS初接触 - 在项目中使用ExtJS

    ExtJS初接触 - 在项目中使用ExtJS 今天ExtJS官网发布了ExtJS最新正式版4.2.1.Ext JS 4.2.1 正式版 下载 ExtJS为开发者在开发富客户的B/S应用中提供丰富的UI ...

  6. Java之路——Java初接触

    本文大纲 1.Java是什么 2.Java历史 3.Java技术范围 3.1 Java SE平台技术范围 3.2 Java EE技术范围 3.3 Java 体系技术范围 4.总结 1.Java是什么 ...

  7. python 之 数据类型初接触

    python 之 数据类型初接触 标准数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Set(集合) Dicti ...

  8. Dapr微服务应用开发系列2:Hello World与SDK初接触

    题记:上篇介绍了Dapr的环境配置,这次我们来动手尝试一下Dapr应用的开发 Hello World Dapr应用的Hello World其实和其他的Hello World一样简单: 首先用你喜欢的语 ...

  9. PHP webservice 的初接触

    webservice 现在是开始流行了,很多业务开启了这个功能.去年接触的一个金融类的项目有类似功能调用.当时没放心思研究,最两天试着接触了下,还真不错的.起步其实挺简单. 服务端的代码 server ...

随机推荐

  1. zedboard如何从PL端控制DDR读写(一)

    看了一段时间的DDR手册,感觉大体有一点了解了,想要实际上板调试,然而实验室可用的开发板不多,拿了一块zynq板看了看,DDR确实有,但是已经集成了控制器,而且控制器还放到了PS端,PL只能通过AXI ...

  2. IE 不兼容的几个js问题及解决方法1

    IE 不兼容的几个js问题及解决方法 1 Table的问题   在动态新增tr或者td时,createElecment() 一般用appendChild();都不生效,解决办法是用新增tbody, 如 ...

  3. tcpdump抓包

    名称(NAME)tcpdump-转储网络上的数据流总览(SYNOPSIS)tcpdump[-adeflnNOpqStvx][-ccount][-Ffile] [-iinterface][-rfile] ...

  4. eclipse启动tomcat时设置端口

    近在做项目需要更改tomcat的端口号,开发工具用的是Eclipse,更改后在Eclipse中重启发现,端口号依然是8080,原来在配置文件更改了tomcat端口号后,要在Eclipse重新装载一次, ...

  5. 双人对战的球类游戏IOS源码

    双人对战的球类游戏源码,这个是一款双人对战的ios球类游戏源码,游戏的源码也比较详细的,我们在屏幕上下看到各有一个球门,内有一球,两边通过控制轮盘使球进入对方的球门的,其实玩法也很简单的,我们知道体育 ...

  6. 遇到困难 jsp代码onclick="javascript:return(checklogin());"报错

    <script language="javascript"> function checklogin() { if (document.getElementById(& ...

  7. c#中winform的MVP模式的简单实现

    MVP模式是类似于MVC模式的一种设计模式,最近在做项目学习过程中遇到,弄了很久终于有一些眉目,这是学习过程中的一些笔记.MVP指的是实体对象Model.视图Viw和业务处理Presenter.MVP ...

  8. SQL服务器更改名称后

    SQL服务器更改名称后 编写人:CC阿爸 2014-6-15 在日常SQL 2005数据库的操作中,有时安装完成数据库后,再更名,造成部分SQL服务不能正常使用(在SQL2000 时,想都别想更名了) ...

  9. 关于overflow-y:scroll ios设备不流畅的问题

    最近做双创项目的时候因为页面有很多数据显示,所以打算让它Y轴方向滚动条的形式展现,但在测试阶段发现IOS设备滑动效果非常不理想: search by google之后找到解决办法: -webkit-o ...

  10. 【Delphi】从内存(MemoryStream)使用WMP(WindowsMediaPlayer)控件播放视频音频(Play Video with WMP from MemoryStream)

    关键字: MemoryStream.WMP.WindowsMediaPlayer.Play .Load. Delphi.C++.C#.ActiveX控件 作  者: CaiBirdy 问  题:正常使 ...