PB搭建Webservice环境(Oracle数据库)经验

nocry115 2016-08-08 11:58:17
  工作需要用Webservice方式做接口,折腾了半月,走了无数弯路,才初见眉目。
  为了避免坚守PB开发的同学以后遇到同样的问题,在此做个简要总结——by nocry115(泥草鞋)

一楼:PB11.5+oracle10G(32位)+Webservice+WIN7(64位)
二楼:PB11.5+oracle10G(32位)+Webservice+WIN2008Server R2(64位)

前言:
  调用Webservice,PB9就可以,但要开发Webservice的应用服务端,至少需要PB11,在此选用了PB11.5。
  另,开发Webservice服务,windows操作系统不要用XP,开发环境缺陷会造成各种问题,曾经发帖求助,最后发现完全时系统环境造成的,必须选用适合Webservice服务的操作系统,否则无解。


1) Oracle数据库:
  Oracle数据库9i以下在win7以上安装不了,oracle10G不能安装64位的,否则将出现“oracle 库 oci.dll 无法加载错误”!
  oracle10G(32位)安装注意事项:
a)修改database\stage\prereq\db\refhost.xml,添加:
<OPERATING_SYSTEM>
<VERSION VALUE="6.1"/>
</OPERATING_SYSTEM>

b)修改database\install\oraparam.ini文件,添加:
[Certified Versions]
#You can customise error message shown for failure, provide value for CERTIFIED_VERSION_FAILURE_MESSAGE
#Windows=5.0,5.1,5.2,6.0,6.1 #这里前面部分内容有的,只添加6.1(win7以上的版本号)

[Windows-6.1-required]
#Minimum display colours for OUI to run
MIN_DISPLAY_COLORS=256
#Minimum CPU speed required for OUI
#CPU=300
[Windows-6.1-optional]

c)安装完后进入控制台 http://localhost:1158/em/ 如果报错,修改时区:
搜索安装后的文件:emd.properties修改:
agentTZRegion=Asia/Chungking
在系统运行cmd中输入以下命令:(假设orcl为SID)
set ORACLE_SID=orcl
emctl stop dbconsole
emctl start dbconsole

2) WIN7(64位)环境:
  系统安装时自带的VC运行库,不知道是否起作用。
a)在【控制面板】-【程序】-【打开或关闭Windows功能】中:
勾选【MIcrosoft.Net Framework 3.5.1】
勾选【internet服务】-【万维网服务】-【应用程序开发功能】中的【ASP.NET】和【ISAPI扩展】


b)桌面【计算机】-右键【管理】,在【服务和应用程序】的【IIS管理器】中,将默认网站指向你的网站目录或沿用从前的


3) PB11.5开发Webservice应用:
a)建立一个p_yourwebservice服务时,将自动生成一个同名的n_yourwebservice不可视对象,在n_yourwebservice编写函数。
b)设置好p_yourwebservice的参数(如图),在【object】中勾选上你的函数;保存后点击菜单Deploy Project




c)在p_yourwebservice【object】中点击【Run Web Service】,看看运行结果:


d)实测oracle数据操作不稳定,有时成功有时失败,解决方法:
在n_yourwebservice的创建事件中:
//定义好数据库各属性,如SQLCA.DBMS = "O90 Oracle9i (9.0.1)"……
//并加上:
connect using SQLCA;
disconnect using SQLCA;

//在你的每个n_yourwebservice数据库函数里,开头进行:
connect using SQLCA;
//函数结束前
disconnect using SQLCA;

...全文
2949 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sbks 2016-08-09
  • 打赏
  • 举报
回复
引用 4 楼 nocry115 的回复:
PB11.5+oracle10G(32位)+Webservice+WIN2008Server R2(64位) ====================== 1) Oracle数据库: 参见1楼,请安装oracle10G(32位),否则:【Oracle library OCI.DLL could not be loaded】 的错误会等着你 2) WIN2008Server R2(64位)环境: a)在【计算机】右键【管理】-【角色】中添加:【Web服务器(IIS)】,其中【应用程序开发】项勾选【ASP.NET】和【ISAPI扩展】 b)在【计算机】右键【管理】-【角色】中添加:【应用程序服务器】,勾选【.Net Framework 3.5.1】 c)在【服务器管理器】-【角色】-【Web服务器(IIS)】-【Internet 信息服务】中: 展开应用服务器下的【网站】,停止默认的网站,创建新网站,指向你的Webservice目录。 为避免新网站的端口冲突,可重新【绑定】一个端口,如:9090。 3)PB11.5开发环境下Webservice应用移植到应用服务器: a)开发环境下,编译p_yourwebservice时,在【Deploy】项不要选编译到IIS,要选择“生成安装文件” b)编译后的*.msi文件,copy到应用服务器运行一下。 可查看下【服务器管理器】-【角色】-【Web服务器(IIS)】-【Internet 信息服务】中的【网站】,如果你的网站其下项显示的是网站目录(虚拟目录,还有一个同级目录是YourWebservice_root),请右键转换位为【应用程序】。 (应用程序池此时自动为PBAppPool,经典的.Net Framework v2.0.50727类型 ) 在应用服务器IE上浏览下效果,注意加端口: http://服务器IP:9090/yourwebservice/n_yourwebservice.asmx c)远端客户IE上浏览下效果:http://服务器IP:9090/yourwebservice/n_yourwebservice.asmx 如出现权限不足错误提示:运行时错误<!-- Web.Config 配置文件 --> 请在应用服务器上你的Webservice应用目录中,找到Web.Config,在<system.web></system.web>之间加入: <webServices> <protocols> <add name="HttpSoap"/> <add name="HttpPost"/> <add name="HttpGet"/> <add name="Documentation"/> </protocols> </webServices> d)在开发环境下n_yourwebservice中编写了2个功能相同的函数,1个完全用SQL语句,1个用datastore进行update,奇怪的问题出现:用SQL语句的函数结果正常,用datastore的函数对string类型的字段更新失败,数值、时间类型的没有问题! 解决方法:将数据库连接的语法选项中去掉引号项 重新生成datastore对应的数据窗口,重新编译,发布到服务器即可。 =================================over=========== 另,请教:搭建了webservice环境,假设用户可以通过internet访问该webservice网站,如何做一个简单的查询报表? 如已知用户输入的ID,在IE上retrieve并显示出该ID对应表中的ID、name内容?
马上学习getfullstate(),setfullstate()这一对函数.客户端getfullstate()得到一个blob,它包含了数据窗口的全部语法,在服务端对一个datastroe进行setfullstate(),该datastore就变成了具有指定语法,对它进行常规的retrieve(),再对该datastore进行getfullstate(),回传给客户端,客户站对datawindow进行setfullstate(),至此,完美地实现数据的检索 甚至,将datawindow布署有服务端,在客户端指定让服务端代码知道检索哪个datawindow,客户端的代码就更轻量级了 blob不具体压缩,数据量比较大时,考虑使用压缩算法即可
zhangyangziwo 2016-08-09
  • 打赏
  • 举报
回复
感谢分享。。。
nocry115 2016-08-08
  • 打赏
  • 举报
回复
PB11.5+oracle10G(32位)+Webservice+WIN2008Server R2(64位)
======================
1) Oracle数据库:
参见1楼,请安装oracle10G(32位),否则:【Oracle library OCI.DLL could not be loaded】 的错误会等着你

2) WIN2008Server R2(64位)环境:
a)在【计算机】右键【管理】-【角色】中添加:【Web服务器(IIS)】,其中【应用程序开发】项勾选【ASP.NET】和【ISAPI扩展】
b)在【计算机】右键【管理】-【角色】中添加:【应用程序服务器】,勾选【.Net Framework 3.5.1】
c)在【服务器管理器】-【角色】-【Web服务器(IIS)】-【Internet 信息服务】中:

展开应用服务器下的【网站】,停止默认的网站,创建新网站,指向你的Webservice目录。
为避免新网站的端口冲突,可重新【绑定】一个端口,如:9090。

3)PB11.5开发环境下Webservice应用移植到应用服务器:
a)开发环境下,编译p_yourwebservice时,在【Deploy】项不要选编译到IIS,要选择“生成安装文件”
b)编译后的*.msi文件,copy到应用服务器运行一下。
可查看下【服务器管理器】-【角色】-【Web服务器(IIS)】-【Internet 信息服务】中的【网站】,如果你的网站其下项显示的是网站目录(虚拟目录,还有一个同级目录是YourWebservice_root),请右键转换位为【应用程序】。
(应用程序池此时自动为PBAppPool,经典的.Net Framework v2.0.50727类型 )
在应用服务器IE上浏览下效果,注意加端口:
http://服务器IP:9090/yourwebservice/n_yourwebservice.asmx

c)远端客户IE上浏览下效果:http://服务器IP:9090/yourwebservice/n_yourwebservice.asmx
如出现权限不足错误提示:运行时错误<!-- Web.Config 配置文件 -->
请在应用服务器上你的Webservice应用目录中,找到Web.Config,在<system.web></system.web>之间加入:
<webServices>
<protocols>
<add name="HttpSoap"/>
<add name="HttpPost"/>
<add name="HttpGet"/>
<add name="Documentation"/>
</protocols>
</webServices>

d)在开发环境下n_yourwebservice中编写了2个功能相同的函数,1个完全用SQL语句,1个用datastore进行update,奇怪的问题出现:用SQL语句的函数结果正常,用datastore的函数对string类型的字段更新失败,数值、时间类型的没有问题!
解决方法:将数据库连接的语法选项中去掉引号项

重新生成datastore对应的数据窗口,重新编译,发布到服务器即可。

=================================over===========

另,请教:搭建了webservice环境,假设用户可以通过internet访问该webservice网站,如何做一个简单的查询报表?
如已知用户输入的ID,在IE上retrieve并显示出该ID对应表中的ID、name内容?

nocry115 2016-08-08
  • 打赏
  • 举报
回复
另,再次感谢在webService等BS方向前行的PBer!感谢你们的探索与分享@sbks @WorldMobile
zjl8008 2016-08-08
  • 打赏
  • 举报
回复
引用 1 楼 qq_17847881 的回复:
楼楼辛苦,望坚守PB的朋友们有好的回报
多谢分享!!
划]破 2016-08-08
  • 打赏
  • 举报
回复
楼楼辛苦,望坚守PB的朋友们有好的回报

662

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder Web 应用
社区管理员
  • Web 应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧