PowerBuilder6.5 调用WebService

本文介绍了如何在PowerBuilder6.5中通过GetURL功能直接调用WebService,解决MSSOAP和MSXML不理想的问题。作者创建了一个继承自internetresult的对象n_ir_wsclient,利用GetURL获取返回的UTF-8格式数据,由于PB6.5不支持直接转换,作者编写了COnvCode.dll进行编码转换,实现了PB65可以识别的字符串。
摘要由CSDN通过智能技术生成

      近期和别的公司做接口,对方是 WebService ,这样我们需要在 owerBuilder6.5 中进行调用。在 Google 等上找了找,发觉都是采用 MSSOAP.SoapClient 或者 MSXML.XMLHTTP 进行,在具体测试后发觉不是很理想,于是想是否可以直接使用

PB6 本地的 GetURL 功能进行呢?于是有了下面的方案:

      首先从 internetresult 继承对象 n_ir_wsclient ,并定义实例变量 dataResult 用于保存 GetURL 的返回结果。这样就可以进行 WebService 调用了

Inet                lnv_inet

n_ir_wsclient          lnv_wsclient

Integer               li_return

String               ls_url,ls_data

 

lnv_inet       = Create Inet

lnv_wsclient   =   Create n_ir_wsclient

 

ls_url = “http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=1380571&userID=”

 

li_return = lnv_inet.GetURL(ls_url, lnv_wsclient)

 

ls_data = String(lnv_wsclient.dataResult)

 

Destroy lnv_wsclient

Destroy lnv_inet

         这个时候返回结果为 :

<?xml version="1.0" encoding="utf-8"?>

<string xmlns="http://WebXml.com.cn/">1380571 锛氭禉姹 ? 窞 娴欐睙绉诲姩閲戝崱绁炲窞琛屽崱 </string>

         麻烦了,返回结果是 UTF-8 格式,可是 PB65 不支持直接转化,怎么办呢?最后想想还是辅助了一个 dll 吧,于是 COnvCode.dll 出炉了。  

Function Integer UTF8ToAnsii(String szUTF8,Ref String szAnsiiRslt) Library "ConvCode.dll" Alias For "_UTF8ToAnsii@8"

Function Integer AnsiiToUTF8(String szAnsii, Ref String szUTF8Rslt) Library "ConvCode.dll" Alias For "_AnsiiToUTF8@8"

   最后完整的调用函数也出来了

Inet                           lnv_inet

n_ir_wsclient   lnv_wsclient

Integer                       li_return

String                          ls_url,ls_data,ls_result

Long                        ll_length

 

 

ls_url = arg_url

// 1.URL UTF-8 格式

SetNull(ls_result)

ll_length = AnsiiToUTF8(ls_url,Ref ls_result)

ls_result = Space(ll_length)

ll_length = AnsiiToUTF8(ls_url,Ref ls_result)

If ll_length < 0 Then

         LastError = -100

         Return ""

End If

ls_url = ls_result

 

// 2 、执行 WebService

lnv_inet     = Create Inet

lnv_wsclient = Create n_ir_wsclient

 

li_return = lnv_inet.GetURL(arg_url, lnv_wsclient)

 

ls_data = String(lnv_wsclient.dataResult)

 

Destroy lnv_wsclient

Destroy lnv_inet

 

If li_return < 0 Then

         LastError  = li_return

         Return ""

End If

 

 

// 3 、处理返回结果, UTF-8 ANSII

SetNull(ls_result)

ll_length = UTF8ToAnsii(ls_data,Ref ls_result)

 

ls_result = Space(ll_length)

ll_length = UTF8ToAnsii(ls_data,Ref ls_result)

If ll_length < 0 Then

         LastError = -100

         ls_result = ""

End If

 

// 4 、返回

Return ls_result

         这样处理后返回的结果就是 PB65 可以认识的字符串了,前面例子的返回结果如下:

<?xml version="1.0" encoding="utf-8"?>

<string xmlns="http://WebXml.com.cn/">1380571 :浙江 杭州 浙江移动金卡神州行卡 </string>

 

附:

ConvCode.dll 的核心源代码如下:

INT WINAPI __declspec( dllexport) UTF8ToAnsii( LPCSTR szUTF8, LPSTR szAnsiRslt)
{
        INT nResult = 0 ;

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值