公司用到了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吧

package ch01.ts;  // time serverimport javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;/***  The annotation @WebService signals that this is the*  SEI (Service Endpoint Interface). @WebMethod signals *  that each method is a service operation.**  The @SOAPBinding annotation impacts the under-the-hood*  construction of the service contract, the WSDL*  (Web Services Definition Language) document. Style.RPC*  simplifies the contract and makes deployment easier.
*/
@WebService
@SOAPBinding(style = Style.RPC) // more on this later
public interface TimeServer {@WebMethod String getTimeAsString();@WebMethod long getTimeAsElapsed();
}package ch01.ts; import java.util.Date;
import javax.jws.WebService;/***  The @WebService property endpointInterface links the*  SIB (this class) to the SEI (ch01.ts.TimeServer).*  Note that the method implementations are not annotated*  as @WebMethods.
*/
@WebService(endpointInterface = "ch01.ts.TimeServer")
public class TimeServerImpl implements TimeServer {public String getTimeAsString() { return new Date().toString(); }public long getTimeAsElapsed() { return new Date().getTime(); }
}

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

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

这个类将实现的服务发布在网络上,我们通过
% 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对象进行编程了
soapConnection conn //Define SoapConnection
timeserverimplport lts_port
int li_rVal
string ls_time
conn = create SoapConnection
li_rVal = conn.CreateInstance(lts_port, "timeserverimplport") /*实例化*/
tryls_time=  lts_port.gettimeasstring( )// Invoke servicemessagebox("", ls_time)
catch ( SoapException e )messagebox ("ErrDAT*    d or", "Cannot invoke Web service")   // error handling
end try
destroy conn

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

转载于:https://www.cnblogs.com/szxiaofei14/p/3216246.html

Webservice初接触相关推荐

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

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

  2. 1. Windows Powershell初接触

    1. Windows Powershell初接触 我们之中有些人是因为需要配置Exchange Server2007,才开始对Windows Powershell全新的学习.但是,我认为可以使用WMI ...

  3. 一代程序员如何突破自身技术瓶颈:与敏捷的初接触

    作者:熊节 / 插画:虎头锤 2000 年前后的中国,有一批年轻的 IT 从业者,受困于软件工程不能有效解决他们的实际问题,开始关注到敏捷,并在很短时间里翻译引进了敏捷的主要基础著作. 重构--一种写 ...

  4. 初接触Directdraw

    最近在做东西,刚用mfc+gdi做了一个小东西,才明白mfc是如何操作图片的.说实话,用mfc操作.编写代码很容易就可以将一张图片展示在屏幕上. 我也了解一些关于用mfc做图片的优点:它集成了大量的数 ...

  5. 1.SharePoint2010初接触

    2011年,这一年,我才开始出来工作.这一年,我开始接触SharePoint. SharePoint是什么一开始很模糊,随着慢慢接触才开始了解它. SharePoint在官方的解释是一个业务协作平台. ...

  6. Node.js初接触(一)

    本来还在纠结着到底要学哪一种后台语言呢,突然发现node.js很火,既然能被这么多人推崇,自然是有他的优势的.去百度百科看了一眼,或许是我理解能力太差,并没有了解到很多关于node.js的东西,大概就 ...

  7. WebService初入

    WebService 1. WebService基本认识 WebService最早是微软提出了一种以XML为载体网络信息传输的规范,现在几乎所有的语言与平台都支持,带有状态机制,不依赖于容器,可以发送 ...

  8. 初接触RTMP流媒体实时消息传输协议

    由于公司目前的一个项目涉及到直播那一方面,在这之前我完全没有接触过这么高大上的东西,但是交给我了我就想办法完成.临近周末的星期五,折磨了一天,环境搭建了一天,终于把rtmp的推流服务器给搭建好了,IO ...

  9. 1.初接触思科模拟器

    本人大专学生一枚,通过上课接触到思科模拟器 博客参考@AI_assad的<Cisco Packet Tracer 实验教程> 学习也是看了他的博客教程,在此非常感谢大佬@AI_assad ...

最新文章

  1. 你是否真的了解全局解析锁(GIL)
  2. apache2.4中layout模块和ssi模块的冲突
  3. Django-model中的Querysets
  4. 把struts2的struts.xml配置文件分解成多个配置文件
  5. java的知识点30——设计模式
  6. sealed、new、virtual、abstract与override 趣解
  7. 2 字符串求交集_PostGIS教程十八:维数扩展的9交集模型
  8. ISV客户博客系列:Persistent Systems 使用Windows Azure交付基于Java的CloudNinja项目
  9. 快速掌握用python写并行程序
  10. 解决电脑总是“正在识别”,无法获取合法地址
  11. 【 马哥教育内部文档】-RPM制作指南
  12. MapReduce如何使用多路输出
  13. mysql dbutil_DBUtil连接数据库
  14. 我的世界 服务器文件ess,我的世界指令大全 ess指令用法介绍
  15. GIS中墨卡托与WGS 84的瓦片编号计算方法
  16. Promise的理解
  17. 从毛衣到西装 - 硅谷CEO穿衣进化史
  18. 基于百度AI和QT的景物识别系统
  19. mymps蚂蚁分类信息系统基本标签
  20. PHP lighttpd spawn-fcgi安装步骤

热门文章

  1. 【Android】Intent介绍及Intent在Activity中的使用方法
  2. 中set无效是怎么回事_一起认识下,那些我们应该知道的mysql中的变量知识点
  3. html实现div打印,如何在html div的中间打印/附加从按钮单击的值?
  4. mysql useing查询,MySQL数据库之多表查询using优化与案例
  5. gc日志一般关注什么_Java架构师必懂的GC日志知识
  6. 专科 java转go 翱翔之路(四)协议通信 锁,互斥锁 读写锁 条件变量锁 连接mysql 查询
  7. 51nod 1272 最大距离 O(nlog(n)) , 快排 , 最大连续子串
  8. Caffe源码解析—核函数
  9. GEMM算法及优化流程详解
  10. 舰娘 服务器 维护时间,《舰娘Collection》停止运营公告