Webservice初接触
公司用到了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,
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
转载于:https://www.cnblogs.com/szxiaofei14/p/3216246.html
Webservice初接触相关推荐
- Dapr微服务应用开发系列2:Hello World与SDK初接触
题记:上篇介绍了Dapr的环境配置,这次我们来动手尝试一下Dapr应用的开发 Hello World Dapr应用的Hello World其实和其他的Hello World一样简单: 首先用你喜欢的语 ...
- 1. Windows Powershell初接触
1. Windows Powershell初接触 我们之中有些人是因为需要配置Exchange Server2007,才开始对Windows Powershell全新的学习.但是,我认为可以使用WMI ...
- 一代程序员如何突破自身技术瓶颈:与敏捷的初接触
作者:熊节 / 插画:虎头锤 2000 年前后的中国,有一批年轻的 IT 从业者,受困于软件工程不能有效解决他们的实际问题,开始关注到敏捷,并在很短时间里翻译引进了敏捷的主要基础著作. 重构--一种写 ...
- 初接触Directdraw
最近在做东西,刚用mfc+gdi做了一个小东西,才明白mfc是如何操作图片的.说实话,用mfc操作.编写代码很容易就可以将一张图片展示在屏幕上. 我也了解一些关于用mfc做图片的优点:它集成了大量的数 ...
- 1.SharePoint2010初接触
2011年,这一年,我才开始出来工作.这一年,我开始接触SharePoint. SharePoint是什么一开始很模糊,随着慢慢接触才开始了解它. SharePoint在官方的解释是一个业务协作平台. ...
- Node.js初接触(一)
本来还在纠结着到底要学哪一种后台语言呢,突然发现node.js很火,既然能被这么多人推崇,自然是有他的优势的.去百度百科看了一眼,或许是我理解能力太差,并没有了解到很多关于node.js的东西,大概就 ...
- WebService初入
WebService 1. WebService基本认识 WebService最早是微软提出了一种以XML为载体网络信息传输的规范,现在几乎所有的语言与平台都支持,带有状态机制,不依赖于容器,可以发送 ...
- 初接触RTMP流媒体实时消息传输协议
由于公司目前的一个项目涉及到直播那一方面,在这之前我完全没有接触过这么高大上的东西,但是交给我了我就想办法完成.临近周末的星期五,折磨了一天,环境搭建了一天,终于把rtmp的推流服务器给搭建好了,IO ...
- 1.初接触思科模拟器
本人大专学生一枚,通过上课接触到思科模拟器 博客参考@AI_assad的<Cisco Packet Tracer 实验教程> 学习也是看了他的博客教程,在此非常感谢大佬@AI_assad ...
最新文章
- 你是否真的了解全局解析锁(GIL)
- apache2.4中layout模块和ssi模块的冲突
- Django-model中的Querysets
- 把struts2的struts.xml配置文件分解成多个配置文件
- java的知识点30——设计模式
- sealed、new、virtual、abstract与override 趣解
- 2 字符串求交集_PostGIS教程十八:维数扩展的9交集模型
- ISV客户博客系列:Persistent Systems 使用Windows Azure交付基于Java的CloudNinja项目
- 快速掌握用python写并行程序
- 解决电脑总是“正在识别”,无法获取合法地址
- 【 马哥教育内部文档】-RPM制作指南
- MapReduce如何使用多路输出
- mysql dbutil_DBUtil连接数据库
- 我的世界 服务器文件ess,我的世界指令大全 ess指令用法介绍
- GIS中墨卡托与WGS 84的瓦片编号计算方法
- Promise的理解
- 从毛衣到西装 - 硅谷CEO穿衣进化史
- 基于百度AI和QT的景物识别系统
- mymps蚂蚁分类信息系统基本标签
- PHP lighttpd spawn-fcgi安装步骤
热门文章
- 【Android】Intent介绍及Intent在Activity中的使用方法
- 中set无效是怎么回事_一起认识下,那些我们应该知道的mysql中的变量知识点
- html实现div打印,如何在html div的中间打印/附加从按钮单击的值?
- mysql useing查询,MySQL数据库之多表查询using优化与案例
- gc日志一般关注什么_Java架构师必懂的GC日志知识
- 专科 java转go 翱翔之路(四)协议通信 锁,互斥锁 读写锁 条件变量锁 连接mysql 查询
- 51nod 1272 最大距离 O(nlog(n)) , 快排 , 最大连续子串
- Caffe源码解析—核函数
- GEMM算法及优化流程详解
- 舰娘 服务器 维护时间,《舰娘Collection》停止运营公告