pb11+webservice开发分布式三层应用

合集下载

pb调用webservice

pb调用webservice

webser‎v ice服务‎器端会提供w‎s dl接口文‎档,pb里面用w‎e b servic‎e proxy wizard‎从wsdl 生‎成对象,再调用即可(注意把c:\progra‎m files\sybase‎\shared‎\powerb‎u ilder‎下面的pbs‎o apcli‎e nt90.pbd加入t‎a rget),代码样例:SoapCo‎n necti‎o n lsc_co‎n nsoapse‎r vice lproxy‎_objString‎ ls_pro‎x y_nam‎e = "soapse‎r vice "//生成的代理对‎象名称String‎ ls_url‎ = "http://localh‎o st:8080/axis/servic‎e s/SoapSe‎r vice "//web servic‎e url//lsc_co‎n n = Create‎ SoapCo‎n necti‎o nlsc_co‎n n.SetOpt‎i ons( "SoapLo‎g=~ "soaplo‎g.txt~ " ")int li_ret‎,ili_ret‎ = lsc_co‎n n.Create‎i nstan‎c e( lproxy‎_obj, ls_pro‎x y_nam‎e, ls_url‎)If li_ret‎<> 0 ThenMessag‎e Box( "错误", "调用失败,错误号码: " + String‎(li_ret‎))Return‎End Iftns1__‎r eques‎t conte‎n t lst_re‎q uestlst_re‎q uest.arg1 = 5lst_re‎q uest.arg2 = "test "tns1__‎r eturn‎r esult‎ lst_re‎s ultlst_re‎s ult = lproxy‎_obj.GetRes‎u lt(lst_re‎q uest)Messag‎e Box(String‎(lst_re‎s ult.result‎), "code: " + lst_re‎s ult.reason‎.code + "~nmessa‎g e: " + &lst_re‎s ult.reason‎.messag‎e + "~ndesc: " + lst_re‎s ult.reason‎.desc )注意pb调用‎w ebser‎v ice只能‎返回简单的i‎n t string‎类型,复杂的结构会‎出错怎么样在pb‎9里面调用W‎e bServ‎i cepb9也出来‎了,速度够快的,大概看了一下‎,与pb8比较‎,增加的功能不‎多,主要是Web‎Servic‎e,Xml和Ej‎b.我就感受了一‎下p b9的W‎e bServ‎i c e功能,与大家共享。

J2EE简介--分布式的多层应用

J2EE简介--分布式的多层应用

J2EE――分布式的多层应用程序――摘自J2EETutorial1.4.1J2EE平台使用多层分布式的应用模式。

应用逻辑根据其功能分成多个组件,这些应用组件组成了分布在不同机器上的J2EE应用,同时它们依赖于属于它们的各个层。

下面列出了位于不同层的组件. 运行在客户机上的客户层组件. 运行在J2EE服务器上的网络层. 运行在J2EE服务器上的逻辑层. 运行在EIS服务器上的企业信息层通常J2EE应用程序可以用下图表示,从图中可以看出,J2EE应用程序通常由三层构成,因为他们分布于三个不同的物理位置:客户端,服务器,后台数据库服务器。

通过这种方式运行的三层应用模式拓展了基于客户/服务的两层模式。

一.J2EE组件J2EE应用程序由组件构成。

一个J2EE组件是自包含的、与其相关的类和文件一起被集成到J2EE应用程序中并与其他组件通信的功能软件模块。

J2EE规范定义了下面几类组件:。

运行在客户端的应用客户程序及小程序。

运行于服务器网络的Servlet&Jsp组件。

运行于服务端的企业逻辑组件——EJB。

J2EE组件用Java语言编写,它的编译方式与其他的应用程序没什么两样。

J2EE组件与标准Java类的不同之处在于J2EE组件已经证明能很好的集成到了应用程序中,并且与J2EE 规范兼容,它们被部署到负责运行、管理的J2EE服务器上。

二.J2EE客户端J2EE客户端可以是网络浏览器也可以是桌面应用程序。

网络浏览器网络客户程序由两部分组成:动态网页包含各种标记语言(HTML,XML等),它由运行于网络层的网络组件产生,浏览器从服务器接受信息并反馈到页面上。

网络客户端又称为瘦客户。

瘦客户端通常不运行像查询数据库,执行复杂的业务规则,或连到合法的应用程序。

在使用瘦客户时,重量级的操作都被载入到运行于J2EE服务器上的企业Bean中,它能够均衡安全,速度,服务及可靠性。

●小程序网页可以包含小程序。

小程序是一个较小的用java语言编写的程序,它能通过安装在浏览器上的虚拟机运行。

pb11新特性及增强内容(精)

pb11新特性及增强内容(精)

.NET Web Forms转化
选择win32 DLL文件
.NET Web Forms转化
选择JavaScript文件
.NET Web Forms转化
选择发布的类型
.NET Web ForБайду номын сангаасs转化
确认发布
.NET Web Forms转化
.NET Web Forms转化
所有属性都可以在IIS服务器的对应应用上修改, 在PB中修改需要重新发布。
记忆Retrieval Arguments
仅在设计时有效 Composite样式的DW无效 新建的DW必须保存,退出再打开后才有效。
Powerbuilder11.0的其他增强内容
窗口控件的增强
增加了打开和关闭窗口的动画效果 增加了窗口透明度的属性
系统函数的增强
GetByteArray实现blob数据转化为byte数组。 Blob函数支持byte数组作为参数。 各种Trim函数增加第二个参数,可以去除任何空 白的符号,包括回车换行和TAB等。 SetFilter函数增加\s选项,对字符串的比较使用 Ascii模式,不加选项使用的是字典模式。例 如:”#2 >= 'a' and #2 < 'c' \s”
DataWindow的增强
UseEllipsis属性,Edit或EditMask样式的列可以 选择UseEllipsis属性,隐藏显示不了的数据。
设定了Autosize Height属性后无效 设定了Escapement属性后无效
Treeview样式的DW
隐藏树结点(设置height为0) 保留展开状态挪动节点 特有的节点展开等事件无需手工添加
PowerBuilder 11.5(2008第三季度)

PB环境下分布式应用程序的开发

PB环境下分布式应用程序的开发

PB环境下分布式应用程序的开发一、分布式应用程序概述分布式系统的出现源于传统的C/S结构的若干弊病,如效率低,安全性差等,结合到数据库方面来说,全球的DNS(域名解析系统)系统是一个很典型的例子,试想如果把全世界所有的域名都集中到一台服务器中来进行管理,那服务器肯定会因负载过重而无法正常工作,整个互联网也就瘫痪了。

在编写C/S结构的数据库应用系统时,同样也会遇到这类问题,那就是如果客户数量很多,数据量又都很大的情况下,服务器的负载就会很重,而且重复性工作很多,因为很多客户发出的查询可能完全相同而服务器却需要一一进行查询;同时查询算法存储于客户端,这可能不适合一些商业环境,因为算法本身可能是需要保密的。

如果能够在传统的服务器和客户机之间再加一个服务器用于存储查询算法和临时查询结果,则以上问题均得到了解决。

这正是分布式系统的工作原理。

二、在PB环境下如何进行分布式应用程序的开发下图是分布式系统的工作原理图:图(一)首先,分布式服务器必须建立与数据库服务器的连接,可以通过ODBC接口来实现,本文不在叙述,下面要讲述客户端如何通过分布式服务器来访问数据。

在PB环境下要实现分布式的编程,首先在DTS端,需要用到两个对象,一个TransPort对象和一个不可视的用户对象(Classà Custom,Nonvisible Object,以下简称NVO),其中TransPort对象用于响应客户端的连接请求,NVO 对象用于和客户端进行实际的数据传输。

在客户端也需要用到两个对象,分别是Connection对象和代理对象(NVO-Proxy),其中Connection对象用于建立到DTS 的连接,NVO-Proxy 实际上是与NVO一一对应的,它只是NVO的一个代理,在客户端通过此代理对象来调用NVO的函数来实现相关功能。

以下是TransPort对象和Connection对象的常用属性及方法:1、TransPort对象属性:Driver:可选的值有四个,分别是WinSock、NamedPipes、OpenClientServer 和Local,由于Winsock的通用性,一般情况下都选择Winsock。

pb调用Webservice步骤

pb调用Webservice步骤
st_waiting.visible = false
return
catch (PBXRuntimeError e15)
messagebox('调用方法','调用 函数出现 运行错误 错误!')
st_waiting.visible = false
return
catch (RUNtimeerror e16)
下面是我调用他们的下载疾病目录 过程
int mess
mess = messagebox('提示','确定要重新下载数据吗?',question!,yesno!,2)
if mess = 2 then return
st_waiting.visible = true
//////////////////////////
err = '创建实例失败,请检查代理对象是否正确,错误代码'
messagebox('',err)
st_waiting.visible = false
return
end if
//第二步 调用 Ws的方法 , 因为方法不一样,所有函数参数也不一样
string WebService_Return_Values
end if
// 第四部 把返回的值 通过 PBDOM , 转化成 XML 文件
PBDOM_BUILDER pbdom_bldr
PBDOM_Document pbdom_doc
PBDOM_Object pbdom_obj_array[]
PBDOM_Element pbdom_elem
destroy i_conn

使用POWERBUILDER开发分布式三层应用程序

使用POWERBUILDER开发分布式三层应用程序

使用PowerBuilder 6.0开发分布式三层应用程序作者:陈俊明本文档是在PowerBuilder 6.0的基础上产生。

所有内容均为实践中所得,所有代码在程序中均通过(机器配置:P200/64M/6.4G)。

在文章的最后,还有一个通用的服务器框架应用程序,您可对服务器程序只加入您的分布对象即可完成服务器程序。

由于水平所限,错误在所难免,还请大家指正,我的EMAIL是CHENJM@,发邮件时请在主题中加入POWERBUILDER字样。

概述只要有过MIS程序编程经验的程序员都知道,一般情况下,整个MIS应用系统分为两部份,即分为数据库服务器和前台程序(即平时我们所说的C/S结构)。

在这种体系统结构下,应用系统的逻辑实现几乎都是通过前台程序即客户端来体现,少量保存在数据库服务器中(以存储过程的形式),在业务和管理形式没有变化的情况下,这种结构工作得非常好。

可是当业务逻辑发生变化时,我们就需要对客户端程序进行修改和重新编译,并把新程序发布给用户,有时(大多数时候)还要对客户重新进行培训。

可以说,C/S体系结构不能很好的适应未来系统的发展。

正因为此,在软件界逐渐形成另一种应用体系结构即数据库服务器、应用服务器和前台程序。

在这种结构下,几乎所有的商业逻辑都在应用服务器中实现,前台程序只是通过应用服务器提供的接口来实现其功能。

修改商业逻辑,只需要修改应用服务器程序,只要保持对前台程序的接口不发生变化,前台程序可以不用作任何修改即可实现功能的转变,并体现新的商业逻辑,其优点是显而易见的。

PowerBuilder 6.0是当今用于与数据库有关的应用系统开发的首选工具,它支持几乎所有当前流行的数据库服务器,具有可视化的面向对象编程环境,使其非常易于使用。

从5.0版本开始,PowerBuilder支持C/S体系结构和分布式计算体系结构的应用。

本文的主要目的是通过对用PowerBuilder开发分布式计算体系结构应用的学习,使读者能够基本掌握分布式计算体系结构应用的开发。

pb11开发webservice

pb11开发webservice

pb11开发webservice⽤pb11开发webservice真是很简单,现在我把搭建的过程简单描述⼀下。

1、服务端打开pb11,选择菜单file->new->target->.net web service,然后⼀路next,最后⽣产的项⽬⽂件中⾄少包含三项,⼀个webservice应⽤,⼀个p_webservice部署,⼀个n_webservice⽤户对象,然后在这个n_webservice对象中写⾃⼰的公开函数,即可。

例如,函数string wf_getdw(ref string synac)SQLCA.DBMS = "" SQLCA.LogPass = "123456" SQLCA.LogId = "sa" SQLCA.AutoCommit = FalseSQLCA.DBParm = "Namespace='System.Data.SqlClient',Database='mydb',DataSource='.'"connect;datastore lds string ls_rtnlds = create datastore lds.dataobject = "dd" lds.settransobject(sqlca) lds.retrieve()synac = lds.describe("datawindow.syntax") ls_rtn = lds.describe("datawindow.data")disconnect; destroy ldsreturn ls_rtn然后部署web service,打开p_webservice,可以看到有⼏个属性页,其中有⼀个“objcet”页,可以看到你要发布的函数列表。

pb11新特性及增强内容

pb11新特性及增强内容

记忆Retrieval Arguments
仅在设计时有效 Composite样式的DW无效 新建的DW必须保存,退出再打开后才有效。
Powerbuilder11.0的其他增强内容
窗口控件的增强
增加了打开和关闭窗口的动画效果 增加了窗口透明度的属性
系统函数的增强
GetByteArray实现blob数据转化为byte数组。 Blob函数支持byte数组作为参数。 各种Trim函数增加第二个参数,可以去除任何空 白的符号,包括回车换行和TAB等。 SetFilter函数增加\s选项,对字符串的比较使用 Ascii模式,不加选项使用的是字典模式。例 如:”#2 >= 'a' and #2 < 'c' \s”
.NET Web Forms转化
1.新建.NET Web Forms Target
.NET Web Forms转化
选择转化的来源
Start from scratch(从空白开始) Use an Existing library and app object(使用 已存在的应用和对象) Use the library and app object from an existing target(从当前的workspace的某个 target转化)
.NET Web Forms转化
选择转化的来源后,根据选择的不同,后续操 作有所差异
选择从空白开始,要求输入新的应用的名称, library名称等,和建立其他类型的target相同。 选择已存在的应用和对象,需选择一个应用并提 供library list。根据选择的应用所使用的pb版本 在需要的情况下转化。 选择从当前的workspace的某个target转化则直 接选择当前workspace中的某个target

pb webservice调用例子

pb webservice调用例子

以下是一个使用PowerBuilder(PB)调用WebService的示例,字数超过1500字。

首先,确保你已经在PowerBuilder中创建了一个WebService方法,并将其发布为IIS 方式。

然后,按照以下步骤进行操作:创建PB的解决方案文件:在PowerBuilder中创建一个新的解决方案文件,并确保引用了一个pbwsclient11.pbd文件。

这个文件在安装路径中可以找到。

创建对象:从"工具箱"中拖动一个"WebServiceProxyWizard"图标到PowerBuilder的设计界面。

这将创建一个新的对象,用于调用WebService。

连接SOAP对象:在代码编辑器中,使用以下代码连接SOAP对象:ls_s1 = "abc"ls_s2 = "def"// 连接SOAP对象if ole_ws.ConnectToNewObject("MSSOAP.SoapClient30") < 0 thenif ole_ws.ConnectToNewObject("MSSOAP.SoapClient") < 0 thenthrow CreateRuntimeError(ls_error)end ifend if这段代码将尝试连接到两个不同的SOAP客户端对象。

如果连接失败,将抛出一个运行时错误。

初始化WebService地址:使用以下代码初始化WebService的地址:vbnetole_ws.mssoapinit(ls_address)其中,ls_address是WebService的WSDL文件路径。

调用方法:使用以下代码调用WebService方法:vbnetls_return = ole_ws.addstr(ls_s1, ls_s2)其中,addstr是WebService方法名,ls_s1和ls_s2是方法的参数。

PB调用各类WebService或c#程序

PB调用各类WebService或c#程序

PB调用各类WebService或c#程序慢慢的有很多接口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调用过程中出现错误,都没有办法知道哪里错了,这句话就是关键。

使用Power Builder 6.0开发分布式三层应用程序

使用Power Builder 6.0开发分布式三层应用程序

使用Power Builder 6.0开发分布式三层应用程序
开锋
【期刊名称】《水利信息化》
【年(卷),期】2003(000)003
【摘要】介绍分布式计算体系的特点,以及如何利用Power Builder 6.0去实现分布式应用程序.
【总页数】5页(P46-50)
【作者】开锋
【作者单位】水利部南京水利水文自动化研究所,江苏,南京,210012
【正文语种】中文
【中图分类】TP3
【相关文献】
1.使用Windows API函数开发PowerBuilder应用程序多媒体功能 [J], 李邦庆;马玉兰
2.游标在开发PowerBuilder应用程序中的使用 [J], 王旭;秦军
3.使用PowerBuilder 6.0开发分布式体系应用程序 [J], 王洪波
4.PowerBuilder6.0应用程序的开发 [J], 吴晓鑫
5.PowerBuilder用户对象在开发分布式应用程序中的应用 [J], 陈亚峰;李华民;李玲;于国萍;刘海林
因版权原因,仅展示原文概要,查看原文内容请购买。

PB WebService应用

PB WebService应用
• 如果在安装IIS之前,已经安装了.NET FrameWork SDK,则需要执行以下命令,在IIS中注册.NET FrameWork的运行环境。
C:\WINDOWS\\Framework\v2.0.50727 \aspnet_regiis -i
在IIS中增加网站
• 在IIS增加一个网站(不是虚拟目录)。如果计算机 已存在多个网站,可以通过主机头或端口号区分出来。 如果建立的网站端口号不是80,则必须保证防火墙开 放了端口。 • 网站的版本必须为2.0或以上版本。
• IIS里面相应版本的 服务扩,必须启用(允 许)
• 新建的网站,允许是一个空站。即把网站建在一个空 白的目录上。
网站创建向导
网站创建向导
由于网站建在本地,所以IP地址可以不输(127.0.0.1)。一台电脑可以建立多个网站, 通过端口号或主机头区分出来。主机头一般为网站的域名,如.由 于在本地建立,没有绑定域名,所以用不同的端口加以区分。
设置WebService编译时,是生成一个安装包程序,还是直接发布到网站。 Localhost:9001表示发布到本机9001端口的网站上。即刚才在IIS中增加的网站。
在PB中增加WebService项目
新建项目向导完成后,PB IDE自动按向导过程中设置的组件名称,建立了一个不可视 对象。可以在该组件中实现WebService的功能,再编译发布。
在PB中增加WebService项目
可以加入其它的PBL,例如以前已经写好的一些公共类库。
在PB中增加WebService项目
输入需要增加的不可视用户对象的名称。在该用户对象中,实现WebService的功 能。最终可以把该组件编译发布为WebService的各种服务接口。
在PB中增加WebService项目

浅谈BSS三层架构在移动分布式开发中的应用

浅谈BSS三层架构在移动分布式开发中的应用

浅谈BSS三层架构在移动分布式开发中的应用BSS(Business Support System)三层架构是指在软件开发中,将系统划分为三个层次,分别是表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。

移动分布式开发是指基于移动设备的应用开发,在移动互联网时代的大背景下,移动分布式开发已经成为了一种趋势。

BSS三层架构在移动分布式开发中能够提供许多优势和应用,本文将浅谈其在移动分布式开发中的应用。

首先,BSS三层架构能够提供灵活性和可扩展性。

分布式开发意味着应用会在不同的设备和平台上运行,因此系统需要具备灵活性以适应各种设备和平台的差异。

BSS三层架构通过将业务逻辑和数据访问分离,使得业务逻辑可以独立于表示层和数据访问层进行开发和调试。

这样一来,当应用需要适配新的设备或者平台时,只需要对表示层做出相应的修改而不影响业务逻辑和数据访问的实现。

同时,BSS三层架构还能够根据实际需要灵活地添加或删除各个层次的组件,以满足不同业务需求的变化。

其次,BSS三层架构能够提高系统的可维护性和复用性。

在移动分布式开发中,系统往往要面对各种新的需求和变化,因此系统的可维护性尤为重要。

BSS三层架构将业务逻辑和数据访问分离,使得开发人员可以更容易地定位和解决问题。

同时,BSS三层架构也促进了代码的复用,各层次的组件可以独立开发和测试,然后再进行组装和集成。

这样一来,开发人员可以通过复用已经开发和测试过的组件,来提高开发效率并减少错误和重复工作。

另外,BSS三层架构能够提供良好的安全性和性能。

移动分布式开发涉及到通过网络进行数据传输,因此安全性成为了一个重要的考虑因素。

BSS三层架构中,数据访问层负责与数据库进行交互,可以采用安全加密的方式来保护数据的安全性。

同时,通过在业务逻辑层进行业务逻辑的处理,可以减少数据库的负载和网络传输的数据量,从而提高系统的性能。

PB11.5+WEB客户端编程技巧总结

PB11.5+WEB客户端编程技巧总结

PB11.5+WEB客户端编程技巧总结PB11.5+WEB客户端编程技巧总结PB11.5WEB客户端编程技巧总结一、概述用PB11.5把现有C/S程序转换成WEB应用程序后,保留了大部分C/S环境下的代码,并且大部分都能执行过去。

但是在BS平台下,原来的PB代码从客户端转成了IIS上的服务代码,原的“客户端”就成了浏览器,转换后的客户端编程其实就是面向浏览器的编程。

根据目前我对PB11.5所了解的情况,PB11在代码方面可以使用条件编译方式嵌入.NET代码,其实我感觉.net里能实现的内容,用PB代码也基本能实现,.net 里不能实现的,PB也可实现(如datawindow),但这些都属于服务端的编程范畴,实际应用中很少会碰到在PB里再嵌入.net代码的,除非要写一些很特殊的代码,所以,可以说,服务端方面仅用PB代码就可以彻底解决。

但实际上,这种纯PB代码的程序一发布成WEB后,会存在不少问题,在C/S 环境下,要完成一个操作往往需要多个交互过程,如“打开窗口、选择行、输入数据、返回、刷新页面”这么一个过程,转成B/S后,运行是这样的“打开窗口(POSTBACK)、选择行(POSTBACK)、输入数据(回车后POSTBACK)、返回(POSTBACK)”,那么多的POSTBACK使得操作变得很笨重,就连简单的一个MESSAGEBOX,都要2次POSTBACK:“打开消息窗(POSTBACK)、点确定(POSTBACK)”。

因此,使用PB11开发WEB程序将要面临一个很严峻的问题:如何提高客户端的性能,减少POSTBACK次数。

值得庆幸的是,PB11.5的WEB页面使用了AJAX技术,POSTBACK并不会产生整个页面的提交,而是部分提交。

另外,PB11.5还提供了不少客户端的编程接口,可以通过这些编程接口进一步优化页面。

那么,有哪些地方可以运用javascript 和html代码优化页面呢?1、数据窗口对象appendedhtml属性。

Pb11编写webservice数据库连接性能研究

Pb11编写webservice数据库连接性能研究

Pb是很好的开发数据库应用的软件,pb8以前可以用其自带的Transport 对象实现三层结构,但pb8以后简单好用的只有easerver,但据说这是很贵的软件,就是盗版也不好找。

Pb11可直接将nvo发布为webservice,这对pb熟手来说是一个很好的事情,可是,习惯了C/S结构开发的思路,用webservice,数据库连接会不会过于频繁?用pb内部的数据库连接方式有没有连接池?Webservice连接性能到底怎样?等等问题,是每个从C/S编程转向B/S编程或采取三层结构编程的人都会涉及到的。

下面就以pb11写webservicepb8调用对其连接池及性能进行测试。

1、单客户端、不连接数据库、pb写的webservice的响应速度测试方案:Pb11 webservice函数of_adder(),累加当前秒钟值 10000 次的结果。

客户端pb8,在不同电脑上,调用1000次。

Webservice代码如下图。

测试结果:耗时25秒,无数据库连接会话。

2、单客户端、连接数据库、pb的webservice的响应速度测试方案1:函数f_connect()连接数据库,函数of_getdbhandle()返回当前连接数据库事务对象的句柄,客户端保持webservice连接(每次调用不重新初始化),webservice 保持数据库连接不断开。

客户端pb8,在不同电脑上,调用100次。

客户端代码如下:string ls_wsdllong i, jlong numssetpointer(hourglass!)//连接系统库SQLCA.DBMS = "IN7 INFORMIX-7"SQLCA.Database = "sysmaster"erId = "informix"SQLCA.DBPass = wf_sa_pwd()SQLCA.ServerName = "192.168.0.1@server1"SQLCA.AutoCommit = FalseSQLCA.DBParm = "CommitOnDisconnect='No',DisableBind=1"connect using sqlca ;if sqlca.sqlcode <> 0 thenmessagebox('错误',"连接系统库失败",stopsign!)returnend iftime t1,t2t1 = now()st_times.text = ''//循环调用for j = 1 to long(sle_cs.text)yield()if not isvalid(w_1) then exitst_nums.text = string(j)//未创建 webservice连接则创建 ( ws为窗口实例变量 )if not isvalid(ws) thenws = Create oleobjecti = ws.ConnectToNewObject("MSSOAP.SoapClient30")if i <> 0 thendestroy wsmessagebox('提示 ','请检查是否安装了SoapSDK3.0和XML4.0', exclamation!)returnend ifws.ClientProperty("ServerHTTPRequest",true)ls_wsdl = profilestring("soap.ini", "soap", "url", "")ws.mssoapinit(ls_wsdl)ws.ConnectorProperty("Timeout",180000)end if//webservice 方法中每次连接数据库且用完即断开st_dbhandle.text = ws.of_getdbhandle() //webservice方法连接数据库时的dbhandle()//st_dbhandle.text = ws.of_adder()//从 sysmaster 库中查看 webservice 中每次连接是否都释放了,SessionID 是否保持一个// myvpc 为webservice所在主机名(web服务器主机名)select count(*) into :nums from syssessions where hostname = 'myvpc' using sqlca ;if not isvalid(w_1) then exitif sqlca.sqlcode =0 thenst_nums_dq.text = string(nums) //循环第j次时连接数据库的sid数if long(st_nums_min.text) > nums then st_nums_min.text = string(nums) if long(st_nums_max.text) < nums then st_nums_max.text = string(nums) end ifif not isvalid(w_1) then exitnextt2 = now()st_times.text = string(SecondsAfter(t1, t2))if isvalid(sqlca) thendisconnect using sqlca ;end ifif isvalid(ws) thenws.DisconnectObject ( )destroy wsend ifwebservice代码如下图:测试结果:耗时81秒,最大SID数100,每次dbhandle均不同。

基于PB的Client/Server两层结构向Web分布式应用平滑过渡的方法

基于PB的Client/Server两层结构向Web分布式应用平滑过渡的方法
Байду номын сангаас
小 田原 修 , 内 准 离 心 亍 池
- i :上6 复 合 构 造管 制 造 y 击}
忙扣 汁 弓 离心 力 效 果 [ ] E车 金 属 学 会 志 . 95 4 ( ) J .l 18 , 9 9 :
80 1~80 . 5
作者筒介 : 郭伏安 (92 , , 17 一)男 湖南 盏阳^ . 士研 究 生, 硕 目
前 在 武祝 科 技 大学 暗 金 与 材 料 学 院 从 事 陶 瓷 材 科 研 究 ; 寒 光 ( 94 符 1 6

王 取 喜 , 建 江 . 俊 寿 , 氧化 铝 陶瓷 内 衬 不 锈 钢 复台 管 的 王 李 等 组 组 和 性 能 []硅 酿 盐 学 报 ,9 8 2 ( )8 8 1 J 19 ,6 6 :O ~8 2
地 解决 了集 中式运 算 的执 行效率低 及 容量 不足等 同 题 , 企业 信 息 系 统 网络 化 变 成 现 实 。然 而 , 使 由于 P C的 多样 性 , 如何 有 效地 管 理 、 制整 体 系 统并 不 控
韩 志 猛 . 惶 华 . 玉 友 . 陶瓷 内衬 钢 管 陶 瓷 层 的 裂纹 謦 补 王 单 等
钢管压剪强度 的影响[ ]粉末冶金技术 .o 0 1 ( ) 2 7 】 2 0 .8 4 : 5 ~
26 0.
火电厂 的应用[] 木利 电力机械 .9 9 () 2 ~2 . J. 19 .6 :7 9
2 】 俞 洪南 , 6 张红 兵 , 胜 利 S 福 HS复 合 管 在 长 距 离 尾 矿 管 道 输 送 线 上 的 应 用[ ]矿 业 快 报 ,0 0 ( 5 : 1 2 】 20 . 1) 2 ~2 +
目前 大 多 效 应 用 软 件 系 统 所 采 用 的 Ci t ln/ e

PB开发-调用webservice

PB开发-调用webservice

我今天做了这个“PB创建及调用WebService”的小作业,下面我来分享一下我的整个实践过程以及我遇到的问题,希望对大家有所帮助,这个小作业是分以下三部来完成的:一、构建WebService①创建Workspace,Workspace命名为:Your_WebService②建立.NET Web Service Target,这一步只需要一路Next即可最后生产的项目文件中至少包含三项,一个webservice2应用,一个p_webserv ice2部署,一个n_webservice2用户对象,如图所示:③然后在这个n_webservice2对象中写自己的公开函数(只需双击n_webservic e2便会出现如下界面):将你写好的函数保存,你会发现它出现在n_webservice2这个对象的Function s列表中:二、发布WebService①部署web service,打开p_webservice2,可以看到有几个属性页,其中有一个“objcet”页,可以看到你要发布的函数列表。

在你要发布的函数名前打勾;然后点击菜单design->deploy project,即可部署webservice,但前提你必须有iis和.net。

如果部署成功,你的WebService就基本没什么问题啦,可在浏览器输入下图所示链接检查你的WebService部署是否成功?部署成功就是这样嗒:add函数就是你之前在n_webservice2对象中写的公开函数然后我们将该网页存储为wsdl文件(注意:该文件要与你的WebService存在同一目录下),这样配置文件就建立好了。

三、调用WebService不管是用VS开发的基于.NET的WebService,还是用Java开发的Web Service,还是用PB本身开发的.NET Web Service,PB调用WebService的原理是一样的,都是通过WSDL访问WebServices。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

pb+webservice开发分布式三层应用(演示或测试例程代码:WebserviceExample.rar)一、 WEBSERVICE服务端的开发1、新建立一个workspace工作区先择FILE菜单下的NEW,选择标签页‘Workspace’新建一个工作区。

点击后出现下图在文件名处输入工作区的名称,假设我们的工作区名为webserver,单击保存按钮。

这样工作区就建立成功了。

2、建立一个.net web service 应用点击FILE菜单下的NEW选中.net web service 点击ok按钮点击next按钮点击next按钮这里我们不修改pbl库名,当然你可以按你的意思修改库名,点击next 按钮。

一直点Next按钮直到出现这里需要注意一点,如果你当前的IIS端口,不是默认的80 ,假设是7000的话,那么在localhost后面要加上“:7000” ,。

再点击一次next直到finish按钮。

3、连接数据库(建立测试环境所用文件CreateENV.sql)我们先来建立一个数据库的连接以为后期的webservice服务提供一个连接。

打开系统生成的n_webservice对像在其constructor里面写上SQLCA.DBMS = "ODBC"SQLCA.AutoCommit = FalseSQLCA.DBParm = "ConnectString='DSN=localdbora8;UID=scott;PWD=tiger',PBCatalogOwner='scott'"我是拷贝的这里你可以修改成你的数据库连接参数。

数据库连接建立完成后,我们再建立一个uf_retrieve的方法用来提取数据库数据long ll_row,ll_returnrowstring ls_oldsql,ls_newsql,ls_err_a,ls_errorint i,LI_WHEREdatastore ds1ds1 = create datastoreconnect using sqlca;if SQLCA.SQLCode <> 0 thenp_ref_returnerr="连接数据库出错,请检查数据库连接参数。

SQLCA.sqlcode=" & + string(sqlca.sqlcode) + "~r~n"+string(sqlca.DBParm) + "~r~n"+string(sqlca.sqlerrtext) return -1////创建数据窗口出错end ifif len(p_dw_syntax) < 100 thends1.dataobject=trim(p_dw_syntax)//// 我的想法是通过可以传递datawindow名称,而不是几K的Datawindow语法//// 来减轻网络通讯量(考虑到通用性,此想法可免了)// if NOT IsV alid(d_emp) then// disconnect using sqlca;p_ref_returnerr="服务端加载数据窗口出错! '"+trim(p_dw_syntax)+"'不存在?" // return -1////创建数据窗口出错// end ifelseif ds1.create(p_dw_syntax,ls_error)<>1 thendisconnect using sqlca;p_ref_returnerr="服务端重建数据窗口出错! "+ls_errorreturn -1////创建数据窗口出错end ifend ifint li_ali_a=ds1.settransobject(sqlca)if li_a<>1 thendisconnect using sqlca;p_ref_returnerr="服务端设置数据存储事务出错!"return -1///设置对像事物出错end ifls_oldsql=ds1.getsqlselect()if trim(ls_oldsql)='' or isnull(trim(ls_oldsql)) thendisconnect using sqlca;p_ref_returnerr="传入的数据窗口对像sql语法为空!"return -1 //取新窗口语法出错end ifls_newsql=ls_oldsql //先赋值LI_WHERE = pos(UPPER(ls_oldsql),'WHERE',1)IF trim(p_where_clause) <>'' thenIF LI_WHERE = 0 THENls_newsql=ls_oldsql +' '+ p_where_clauseELSEls_newsql=mid(ls_oldsql,1,LI_WHERE - 1 ) +' '+ p_where_clause END IFEND IFif trim(ls_newsql)='' or isnull(trim(ls_newsql)) thendisconnect using sqlca;p_ref_returnerr="连结后的sql语法为空!请检查传入的数据窗口对像sql语法。

"return -1 //取新窗口语法出错end ifif Match ( ls_newsql, '"' ) thendisconnect using sqlca;p_ref_returnerr="重组后的sql语法出错,数据窗口语法不能包含双引号!"+ls_newsql return -1//设置新窗口语法出错elseif not Match ( upper(ls_newsql), "WHERE" ) thendisconnect using sqlca;p_ref_returnerr="重组后的sql语法出错,数据窗口必须包含一个where条件"p_ref_returnerr += ls_newsqlreturn -1//设置新窗口语法出错end ifif ds1.modify( 'DataWindow.Table.Select="' + ls_newsql+'"' )<>"" thendisconnect using sqlca;p_ref_returnerr="重组后的sql语法出错,请检查数据窗口对像SQL语法。

"+ls_newsql return -1//设置新窗口语法出错end ifll_row=ds1.retrieve()if ll_row<0 or isnull(ll_row) thendisconnect using sqlca;p_ref_returnerr="数据检索出错!"+ls_err_a+ls_newsqlreturn -1//服务端检索数据出错end ifif ds1.modify('DataWindow.Table.Select="' + ls_oldsql+'"' ) <>"" thendisconnect using sqlca;p_ref_returnerr="还原旧数据窗口语法出错,请检查数据窗口对像语法是否含有双引号。

"p_ref_returnerr += ls_oldsqlreturn -1 //还原旧数据窗口语法出错end ifll_returnrow=ds1.getfullstate(p_ref_dwoblob)if ll_returnrow<0 or isnull(ll_returnrow) thendisconnect using sqlca;p_ref_returnerr="服务端进行blob时,获取数据行出错!"return -1 //封装到blob变量时出错end ifdisconnect using sqlca;destroy ds1;p_ref_returnerr="数据检索成功!"return ll_returnrow4、把服务端发布到IIS服务选中我们的P_webservice,右键点击,点击Deploy 编译,pb11会自动将webservice发布到我们原来定义的IIS服务器上发布的时候要注意一点就是在objects选项卡上,必须先中我们上面的函数(或者叫方法),library list选项卡上要选上我们的pbl库文件。

关闭所有打开的窗口,然后Deploy(编译)。

1、编译完成后run一下我们的webservice看看是否发布成功,出现上图并能看到我们定义的函数,webservice就算是发布成功了。

(呵呵....)其它可能有参考意义的图片(PowerBuilder125/.NET4样例)这样我们就完成了一个服务端检索方法。

下一节我们接着继续讲解如何用客户端检索数据。

二、 客户端调用webservice1、建立一个PB应用点击确定后点击finish 完成2、给工程附加pbsoapclient110.pbd (或pbsoapclient125.pbd,宜与PB版本对应)这个文件通常在pb11的安装目录里,可以通过搜索找到它,然后将这个文件拷贝到我们新建应用的目录下,并附加到工程里面来。

3、为应用添加一个webservice proxy函数添加完成后在工程里面添加一个窗口,我们来实验一下我们前面的工作注意:应用程序要与webservice通讯都要通过webservice proxy来完成,所以我们首先要建立一个proxy。

(小提示:对已经建立了Proxy的,如果web端定义发生了‘复杂’变化,客户端简单deploy失败时,可删除客户端与本proxy相关的内容,在保留其它内容的前提下,重新建立Proxy,重新Deploy。

)Ok后,一直点击next,在WSDL File Name指定页面,填写如下:面去找,如下图然后一直Next,直到下图填写如下:打开我们刚才定义的代理,并Deploy编译。

相关文档
最新文档