PB9调用.net dll和web service

最近工作中接触到一个比较老的语言,Power Builder,为了方便实现功能,采用PB调用.NET dll和web service的方法为PB提供新的扩展功能,因为以前从未接触过PB,因此费了些功夫,现将方法记录下来备查。(以下内容均使用PB9)

 

PB调用.NET dll

1. 生成dll

c1302f59b9b70d2ca673d426fe78ec4ca91.jpg

 

8afb1df7492703861538b91aa7cd28b7763.jpg

上图中的源码为

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;  //该引用必须

namespace CallByPB
{
    [Guid("717ce1a8-19f0-4af8-bf28-b92dc5fadc63")]     //利用GUID生成器随机生成,大家上网查如何生成,必须
    public interface CallParamers
    {
        [DispId(1)]
        string PBCall(string para, ref int result);

    }

    [Guid("80b62040-2d4f-451c-be0e-ccc80f2474eb")]   //利用GUID生成器随机生成,大家上网查如何生成,必须
    [ClassInterface(ClassInterfaceType.None)]
    public class Class1 : CallParamers
    {
        public string PBCall(string para, ref int result)
        {
            result = 1234;
            char[] tmp = para.ToCharArray();
            Array.Reverse(tmp);
            return new string(tmp);
        }

    }
}

注意在生成dll之前,必须在工程属性中选择使程序集com可见,并为com互操作注册,如下图所示。

5aedd5b359e4608b77f75d277dab5c1675e.jpg

d50b4ae4655c1772f908d87682d6bac7e45.jpg

设置完成后,检查工程Properties中的AssemblyInfo.cs文件,确保[assembly: ComVisible(true)]并保存。接下来就可以生成dll了,注意生成dll时必须用管理员权限打开VS。

c504ff98647c09809f01da96b93cb3bb446.jpg

2. 注册dll

生成dll后,利用如下命令在命令行中注册dll。注意根据.net framework版本选择合适的命令,如果是.net 2.0,则下面命令中的v4.0.30319换为v2.0.50727。此外,注册时需要用管理员权限打开命令行窗口。

C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe path\to\your\dll\CallByPB.dll

1ad8c6353a9870a907f4e6acb29190e2bdb.jpg

3. 调用dll

在PB的合适位置添加如下代码

string messages
string test = "asd123"
int flag, returns

OleObject Oleb
Oleb = Create OLEObject
flag = Oleb.ConnectToNewObject("CallByPB.Class1")     //CallByPB为C#中命名空间(namespace) ,Class1为C#中类名

if flag <> 0 then
    MessageBox("提示","PB调用C#COM组件失败,返回消息")
    return
end if

messages =Oleb.PBCall(test, ref returns)
MessageBox("提示", messages+'~n'+string(returns))

运行PB,即可得到调用的结果。注意,如果要发布PB程序,需要将.NET dll复制到PB程序同一目录下,并重新注册。

18b5f5fcd5589354d21bfb2a8af9b8210fb.jpg

PB调用Web Service

1. 生成并部署web service

e35b47a913e2f35a003b8aeffeec75c6767.jpg

d7bec73b85e6e42aa6326c0d64a75f26b1f.jpg

593945ad36f76cf6f1d32beb5194ef06b86.jpg

158bad6ae666c74e3c39368c7d160b20ea1.jpg

上图中的代码为

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

namespace WebService
{
    /// <summary>
    /// WebService1 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
    // [System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }

        [WebMethod]
        public string test(string para)
        {
            char[] tmp = para.ToCharArray();
            Array.Reverse(tmp);
            return new string(tmp);
        }
    }
}

用VS成功生成后,即可进行部署。部署需要安装IIS服务,可在控制面板添加删除程序中添加windows特性,勾选IIS和对应的.NET运行环境即可安装,此处不再赘述。接下来进行部署

089d05b2e185a2010e4e76df8977bc83b67.jpg

31a988602400fb666a8ed87bda53b56c479.jpg

接下来打开IIS管理界面,新建网站

e88321071712be291a7d8409777182939ad.jpg

65ba16af8f059f42d62825c39e4d9f91b63.jpg

a8c60f7d841852cd66237d3924a6043d024.jpg

d890e27197e1b5a73fdf89f1b5ea64b56b3.jpg

注意要把默认网站关闭,或者修改默认端口,防止端口冲突。完成后,将应用程序池修改为.NET 4.0。

8db50290cd7b2ed6372547b8cfbed6b7c97.jpg

4f3623d26830c6eae9911a918bfe4c4ebef.jpg

重新启动网站后在浏览器中输入网址,如能看到类似如下网页,则说明部署成功

986865a4bd4eeab67264c1dd9ff97b83ea8.jpg

2. 在PB中生成web service代理

ce1035890e72ff39f265d0b4b4ee78d0b85.jpg

将web service地址填入下图红框处,注意在文件名后面增加了"?wsdl"字样

1cfd04b119a09dcea4c0a4881844d7ae48c.jpg

点击下一步之后,正常情况下会出现下图。但实际上PB9有很多版本,只有9.0.3 build 8836以上的版本才能正常发现Web Service,其他版本可能找不到。PB9.0.3 build 8836的补丁可在如下网址下载:

https://download.csdn.net/download/u014559935/10938422

fac5970525f4ed8e301e38e7650d9b15eac.jpg

fb0268f12e3a951d16ac3af2414b6595d30.jpg

b2d3189776162843cfd1a715ba853f165c5.jpg

158e22dc08a1b6be380c7a559b4926e061b.jpg

最终生成一个工程文件如下图所示,右键点击该工程文件,选择Deploy

ce8c6da493161a68fe8b25f43e07cc5564e.jpg

则可以生成web service代理如下图红框所示,注意生成的时候要把右边所有窗口关掉

fcb2eac52c3bc545257da2e86707067bd7a.jpg

接下来即可通过生成的web service代理在代码中合适的地方调用web service。注意需要导入红框中的pbsoapclient90.pbd文件,否则会报错,该文件位于pb安装目录下的Shared\PowerBuilder目录下。

d71ace43f3348054419fc60e021aeb8b46e.jpg

上图中的代码如下

String  ls_return
string test = "545758602"
soapconnection lsc_conn                                                                                                
webservicetestwebservice1soap lsrv_obj                                                                                                       

lsc_conn = CREATE soapconnection
lsc_conn.createinstance(lsrv_obj,"webservicetestwebservice1soap")     

ls_return = lsrv_obj.test(test)   // test就是web service中的函数
messagebox("",test + "~n" + ls_return)

导入pbsoapclient90.pbd的方法如下

fde90f8f53e0989a5d110415d5c706700b5.jpg

049d66e58c8a1d936050a2bafb13a9cc713.jpg

运行结果如下

1177be08d25303f77ce7a857bf08d7cb37b.jpg

 

转载于:https://my.oschina.net/propagator/blog/2978887

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值