pb调用java webservice_PB调用各类WebService或c#程序

当PowerBuilder(PB)无法直接调用某些接口时,可以使用C#作为中转。本文详细介绍了如何用C#编写类,调用Java Webservice,并将C#程序编译为PB可调用的COM组件,包括编译、注册过程以及PB调用DLL的方法。同时,提供了生成Web服务引用CS文件的命令行方法。
摘要由CSDN通过智能技术生成

慢慢的有很多接口pb都已经无法调用了,还有一些进制计算,位移等pb都无法实现,这时最简单的就是用c#做好,让pb调用。但是pb只能调用最基础的c++开发的标准dll。通过无数次的百度,我找到了一个好的方法,也许您已经知道了。但是我觉得还是要写出来,只要还有一个为此发愁的朋友存在。谢谢!

方法思路是:

1、​用c#写一个类,方法的参数一定要用标准数据类型,返回值也要是标准数据类型(string、int或者结构等等)。在这个方法里面调用各类webservice或其他http接口等pb无法直接调用的。

2、我正巧要做一个调用java写的webservice,下面贴出代码,供参考,因为用csc.exe编译程序无法处理引用,所以

using System;

using System.Collections.Generic;

using System.Text;

using System.Security.Cryptography;

namespace ysxt

{

public class

ws

{

public string sendrecv(string sUser, string

sPwd)

{

string

retu = "";

try

{

xjca.YsxtMainServiceImplService myrefe = new

xjca.YsxtMainServiceImplService();

//这里就是解决csc.exe无法编译引用问题的,xjca是在另外一个ysws.cs文件里,这个cs文件不是我写的,也不能写出来,这是用另外一个命令生成出来的,具体命令看本文最后备注

myrefe.Url =

myUrl;

retu = myrefe.sendRecv(sUser,

sPwd);

}

catch

(Exception e)

{

return

e.Message;//一定要用

try....catch,否则pb调用过程中出现错误,都没有办法知道哪里错了,这句话就是关键。

}

return

sSign + "\r\n" + retu;

}

}

}

3、​关键:将c#程序编译成PB可以调用的COM,为了调试方便,我将编译程序写成了一个bat批处理文件,和.cs程序放在一个目录里面。以下是这个bat文件脚本,很简单的。​

c:

cd C:\Program Files\Microsoft

SDKs\Windows\v7.0A\bin

sn.exe -k D:\program\ysxt\ysxt\ysxt.snk

d:

cd D:\program\ysxt\ysxt\

C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe /t:library

/keyfile:ysxt.snk /out:ysxt.dll ys*.cs

​简单解释一下:我写的c#程序在两个ys开头的.cs文件里面。只要这2个文件,执行这个bat批处理之后,将会在目录下出现snk文件,放着别管他。

4、注册:执行完bat之后,​程序目录下会出现一个dll文件,我的就是ysxt.dll。然后再监理一个bat文件,这个文件以后要一起给客户,他们在安装程序的时候都要执行,当你升级这个dll的时候,也要再次执行,因为光覆盖整个dll是不起作用的,要重新注册,注册用的bat文件如下:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm.exe /u

ysxt.dll

C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm.exe

ysxt.dll /tlb:ysxt.tlb /codebase

再简单解释一下,这些exe文件也许在你电脑上的路径和我不同,版本也许不同,但是我喜欢用framwork2.0

或 3.5版本的,这样去客户端无需安装.net framework环境

5、以下就是pb调用已经注册好的dll的方法了

OLEObject ole_1

long ll_status

stringls_ret

//创建OLEObject对象

ole_1 = Create OLEObject

ll_status= ole_1.ConnectToNewObject("ysxt.ws")

//ysxt是我c#代码中的命名空间,ws是c#代码中的类名

if ll_status <> 0

then

messagebox("打开com失败",string(ll_status))

ole_1.DisConnectObject()

return -1

end if

ls_ret =

ole_1.sendrecv("aaa", "bbb"") //这是c#代码中实现接口调用的方法

ole_1.DisConnectObject()

destroy ole_1

6、最后贴出一个遗漏的,就是如何用命令行生成webservice引用的cs文件

c:

cd C:\Program Files\Microsoft

SDKs\Windows\v7.0A\bin\

wsdl.exe /language:c# /n:xjca

/out:D:\HIS1\program\ysxt\ysxt\ysws.cs

http://172.16.186.6/ysxt-wscs/service/mainservice?wsdl

这个很关键​,不用这个办法编译不了调用web引用的cs文件​

7、最后说个注意事项,pb支持调用的c#方法不能是静态的,就是不能写public

static,只能是public

。如果需要帮助,可以mail我,jinhui7@hotmail.com,我希望能帮到你,因为助人为乐。​​

​​

慢慢的有很多接口pb都已经无法调用了,还有一些进制计算,位移等pb都无法实现,这时最简单的就是用c#做好,让pb调用。但是pb只能调用最基础的c++开发的标准dll。通过无数次的百度,我找到了一个好的方法,也许您已经知道了。但是我觉得还是要写出来,只要还有一个为此发愁的朋友存在。谢谢!

方法思路是:

1、​用c#写一个类,方法的参数一定要用标准数据类型,返回值也要是标准数据类型(string、int或者结构等等)。在这个方法里面调用各类webservice或其他http接口等pb无法直接调用的。

2、我正巧要做一个调用java写的webservice,下面贴出代码,供参考,因为用csc.exe编译程序无法处理引用,所以

using System;

using System.Collections.Generic;

using System.Text;

using System.Security.Cryptography;

namespace ysxt

{

public class

ws

{

public string sendrecv(string sUser, string

sPwd)

{

string

retu = "";

try

{

xjca.YsxtMainServiceImplService myrefe = new

xjca.YsxtMainServiceImplService();

//这里就是解决csc.exe无法编译引用问题的,xjca是在另外一个ysws.cs文件里,这个cs文件不是我写的,也不能写出来,这是用另外一个命令生成出来的,具体命令看本文最后备注

myrefe.Url =

myUrl;

retu = myrefe.sendRecv(sUser,

sPwd);

}

catch

(Exception e)

{

return

e.Message;//一定要用

try....catch,否则pb调用过程中出现错误,都没有办法知道哪里错了,这句话就是关键。

}

return

sSign + "\r\n" + retu;

}

}

}

3、​关键:将c#程序编译成PB可以调用的COM,为了调试方便,我将编译程序写成了一个bat批处理文件,和.cs程序放在一个目录里面。以下是这个bat文件脚本,很简单的。​

c:

cd C:\Program Files\Microsoft

SDKs\Windows\v7.0A\bin

sn.exe -k D:\program\ysxt\ysxt\ysxt.snk

d:

cd D:\program\ysxt\ysxt\

C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe /t:library

/keyfile:ysxt.snk /out:ysxt.dll ys*.cs

​简单解释一下:我写的c#程序在两个ys开头的.cs文件里面。只要这2个文件,执行这个bat批处理之后,将会在目录下出现snk文件,放着别管他。

4、注册:执行完bat之后,​程序目录下会出现一个dll文件,我的就是ysxt.dll。然后再监理一个bat文件,这个文件以后要一起给客户,他们在安装程序的时候都要执行,当你升级这个dll的时候,也要再次执行,因为光覆盖整个dll是不起作用的,要重新注册,注册用的bat文件如下:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm.exe /u

ysxt.dll

C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm.exe

ysxt.dll /tlb:ysxt.tlb /codebase

再简单解释一下,这些exe文件也许在你电脑上的路径和我不同,版本也许不同,但是我喜欢用framwork2.0

或 3.5版本的,这样去客户端无需安装.net framework环境

5、以下就是pb调用已经注册好的dll的方法了

OLEObject ole_1

long ll_status

stringls_ret

//创建OLEObject对象

ole_1 = Create OLEObject

ll_status= ole_1.ConnectToNewObject("ysxt.ws")

//ysxt是我c#代码中的命名空间,ws是c#代码中的类名

if ll_status <> 0

then

messagebox("打开com失败",string(ll_status))

ole_1.DisConnectObject()

return -1

end if

ls_ret =

ole_1.sendrecv("aaa", "bbb"") //这是c#代码中实现接口调用的方法

ole_1.DisConnectObject()

destroy ole_1

6、最后贴出一个遗漏的,就是如何用命令行生成webservice引用的cs文件

c:

cd C:\Program Files\Microsoft

SDKs\Windows\v7.0A\bin\

wsdl.exe /language:c# /n:xjca

/out:D:\HIS1\program\ysxt\ysxt\ysws.cs

http://172.16.186.6/ysxt-wscs/service/mainservice?wsdl

这个很关键​,不用这个办法编译不了调用web引用的cs文件​

7、最后说个注意事项,pb支持调用的c#方法不能是静态的,就是不能写public

static,只能是public

。如果需要帮助,可以mail我,jinhui7@hotmail.com,我希望能帮到你,因为助人为乐。​​

​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值