Powerbuilder调用Webservice的两种方法

文档转自:http://baijiahao.baidu.com/s?id=1570870755451373&wfr=spider&for=pc

提起Powerbuiler这个工具来,现在还能知道的人还真不多。先简单解释一下吧,以下是从百度百科上复制下来的一段文字

PowerBuilder美国Sybase公司研制的一种新型、快速开发工具,是客户机/服务器结构下,基于Windows3.x、Windows95和WindowsNT的一个集成化开发工具。它包含一个直观的图形界面和可扩展的面向对象的编程语言PowerScript,提供与当前流行的大型数据库的接口,并通过ODBC与单机数据库相连。

当然了这也已经老黄历了,从当年的人见人爱(当然了也没那么夸张),到现在的卖艺又卖身(Sybase卖身给了SAP,现在SAP又把Powerbuiilder给了正阳--APPEON).这玩意儿现在也就还剩下医疗行业这一块根据地了,没办法现在流行BS应用,而这恰恰是Powerbuilder的短板。

好了啰嗦了这么多,下面开始进入正题。本人是混医疗圈的,对于一家医院来说要上系统的话,什么his lis pacs ris等等,就是产品线再全的公司有时候也一定能一家就搞定所有系统,所以总会遇到多个系统之间进行数据交互的时候,按照现在的行情,首选自然是Webservice。以下就是Powerbuilder调用其他系统接口常用的两种方法。

方法一(这也是Powerbuilder推荐的方法)

1.在Powerbuilder上点击File->New->Project->Web Service Proxy Wizard

2.如下图所示,填上Webservice的地址点Next

3.下图直接点Next

4.同样,下图继续Next

5.下图红框圈起来的地方填上前缀(不填也行)

6.下图直接Next

7.选择保存代理的pbl

8.下图是上面所做选择的最终结果,需要修改的话直接Back回去修改,否则还是直接Next

9.上面结束以后,菜单Design->Deploy Project,然后将Webservice的方法生成到本地(红框中圈起来的部分)

10.下图是调用Webservice的结果(以http://www.webxml.com.cn上查询手机号归属地的Webservice为例)

11.以下是具体的实现代码

String ls_phone,retmsg,ls_area

testmobilecodewssoap webTest

String ls_webTest = 'testmobilecodewssoap'

String ls_url = 'http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl'

soapconnection conn

conn = Create soapconnection

ls_phone = Trim(sle_1.Text)//手机号

Try

conn.CreateInstance(webTest,ls_webTest,ls_url)

Catch(soapexception re1)

retmsg = "调用失败1,错误号码:" + re1.getmessage()

Catch(runtimeerror re2)

retmsg = "调用失败2,错误号码:" + re2.getmessage()

End Try

MessageBox("提示",retmsg)

Return

ls_area = webTest.getmobilecodeinfo(ls_phone,'')

Catch(runtimeerror re3)

retmsg = "调用失败3,错误号码:" + re3.getmessage()

Destroy(conn)

mle_1.Text = ls_area

方法二:

上面的方法一是使用Powerbuilder推荐的生成代理的方式来调用。但对于这么一个”历史悠久”的工具来说,由于历史原因不是每家都是用的是最新的版本。首先来说上面的方法是从9.0开始支持的,从10以后开始逐渐加强(截止到现在最新版本是12.6).9.0对Webservice的支持并不怎么好,而恰恰目前用的比较多的就是9.0这个版本。在与其他系统交互数据时如果使用方法一的话基本上就得拼人品碰运气了。呵呵,所以下面介绍另外一种方法

首先使用第三方工具抓取Webservice的格式(本例使用soapUI来抓取)

1.菜单File->New soapUI Project,输入Webservice

2.下图就是抓取的结果

数据格式如下:问号就是要输入的参数

?

?

2.下图就是实现方法(代码如下)

string ls_xml,result,ls_phone,as_approve=''

Long ll_length,li_create,li_return

ls_phone = trim(sle_1.text)

ls_xml= ''

ls_xml+=''

'

'

'

'+ls_phone+'

ls_xml+=''

OLEObject http

http = Create OLEObject

li_create = http.ConnectToNewObject( "Msxml2.XMLHTTP.6.0")

If li_create <> 0 Then

li_create = http.ConnectToNewObject( "Msxml2.XMLHTTP.3.0")

End If

ll_length = Len(ls_xml)

http.Open("POST",ls_url,True)

http.setRequestHeader("Content-Type","text/xml;charset=UTF-8")

http.setRequestHeader("Content-Length",String(ll_length))

http.setRequestHeader("Authorization","auth="+as_approve)

http.Send(ls_xml)

Do While http.readyState <> 4 //查询状态,延时

Yield()

Loop

result = http.responseText

http.DisconnectObject()

Destroy http

mle_1.Text = Mid(result,Pos(result,'')+25,Pos(result,'') - Pos(result,'') - 25)

以上就是Powerbuilder调用Webservice的两种方法,其实还有其他方法,这里就不再写了。如果您使用的是10以上版本,推荐使用方法一,如果是10以下的话,还是用方法二吧。

最后顺带提一句,对于使用.Net的人来说很喜欢使用WCF来搞这个,但是WCF搞出来的东西虽然很像Webservice,但还是有区别的,而且使用上面两种方法也是都调用不成功的,要想解决,可以使用微软的SoapToolkit来处理。


pb11来了,大家的希望有了; 作者起初花了近一段的时间研究PB11,写点心得,希望大师们不要见笑: 感觉还是比较方便的和强大的,使用了AJAX技术,无刷新,用于做查询还是很不错的,(如果要求不高的话,做个小程序也可以,效率上不比一般的.NET程序差多少);但是倘若用在大的项目中,本人觉得可能还是需要值得商榷的,有兴趣的同仁可以研究研究; 2. WEBSERVICE: 因为之前有写过PB6的三层,因此也特意研究了一下PB11的WEBSERVICE, ,只要代码写的可以的话,在INTERNET上跑,感觉还是不错的,特别是WEBSERVICE+CS框架的二合一,更有效的决绝了对高性能要求; 我觉得基于pb11的最好的web解决方案是: pb程序(webservice)+IIS for .net框架 +客户端 或者是:pb程序+.net winform+智能客户端+IIS for .net框架 如果你想pb源代码执行不要受任何.net框架限制,就用第一种, 如果想用智能客户端,那可能还是要用第二种。非常建议用第二种。 最后讲一句,其实我觉得做企业应用,软件功能,客户的体验应该是最重要, 就像pb程序(webservice)+IIS for .net框架 +客户端 架构 ,就已经解决了程序安装维护的问题,大可不必再迷信和崇拜纯web的应用了。我觉得winform比web更适合企业级用户 补充: 经过几个月的努力,终于把PB11 WEBSERVICE 框架完成(除了没有封装动态调用存储过程外,已经封装了全部常用功能); 本想把客户端程序上传让大家测试,但是由于公司的WEB服务器上有其它正式的程序在用,所以暂时不准本把 SERVER端程序挂到该服务器上供大家测试,以免带来安全隐患,还请见谅 如有问题可以通过以下方式联系: 本代码非本人所写,在其他网站下载,仅供学习交流之用!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值