祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 12663|回复: 7

[学习笔记] pb12 开发 webservice 注意事项

  [复制链接]

[学习笔记] pb12 开发 webservice 注意事项

  [复制链接]
msgtogcr

主题

0

回帖

1904

积分

金牌会员

积分
1904
贡献
在线时间
小时
2010-9-9 22:31:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
本帖最后由 msgtogcr 于 2011-8-18 23:58 编辑

正在把一个 c/s 的 mis 系统改造为基于 webservice 的 c/s/s 架构,以下是全程记录:

系统环境:winxp sp2 + oracle10g + iis5.1

1. 检查服务端 iis 是否正常,若 iis 不能运行或浏览默认网页时报权限类错误,检查“本地用户和组”中 3 个相关的内置账号是否启用(启动 iis, asp.net, internet 来宾)。

2. 开发 ws,服务端除须安装 pb.net 外,还须安装 framework3.5 sp1 和 framework sdk2.0,为简单起见,直接安装 vs2008,之后再打 vs2008 sp1 补丁,微软官网的那个补丁包需要用较新版本的 iso 工具才能正常读出。

3. 由于 .net 语法更为严格,有符号和无符号的同类型数值变量不能做互相赋值或比较等操作,例如:int 和 uint;此问题可能会导致发布时 pb 直接崩溃!

4. 无符号数值类型不能用于递减循环,例如:for uint = 100 to 1 step -1;发布时通常会给出编译警告,但有时却会导致 pb 异常关闭!

5. 全局函数不能使用 this 代词,可用 GetApplication() 替代。

6. 在 c/s 应用中调用 ws,需要把 ..\share\powerbuilder 中的 pbsoapclient120.pbd(java 标准)或 pbwsclient120.pbd(.net 标准)文件加入到 target 的库列表中;它们分别对应 EasySOAP 和 .Net 引擎,发布时除了要带上这个 pbd 文件外,同时也要带上对应的 pbx 和相关的 dll 文件。

7. 开发 .net 应用的话,必须把 pbwsclient120.pbx 导入到自已的 pbl 中;如果导入报错的话,可以从 pb 自带的 ws 例程中导出相关的 3 个对象为 soap*.sru 文件,再导入自己的 pbl 里。

8. 如果调用 ws 时 CreateInstance() 出现 runtime 错误,则可能是由于老版本 pb 在 system32 目录下放有与 pb 共享目录下同名的老版本 dll,删除或用新版本 dll 覆盖即可(如 libeay32.dll)。

9. 发布 ws 的详细日志文件可以在 pb2cstempout 目录中找到,有些怪异错误的原因就在里面。

10. FileOpen() 必须用流模式,所以 FileWriteEx() 也必须用 blob 类型。

11. (尚待进一步研究)不能直接读写 iis 虚拟目录以外的文件,必须把其添加到 iis 的虚拟目录中;同时要保证该文件所在目录及上层目录 asp.net 拥有相应的访问权限;虚拟目录的真实路径可用 MapVirtualPath() 取得,但不能用真实路径访问虚拟目录的文件,也不能以相对路径访问应用的上层目录及文件(仅可访问 /app_root/file/session/__webservice__/c 中会话产生的临时目录及文件)。

12. 发布给外界调用的 ws 函数不允许重载(这的确是个很糟糕的限制)。

13. 应用对象不能声明实例变量,全局变量只对当前会话有效;应用对象的脚本不会执行;析构事件不会执行;以 post 方式调用的函数不会执行。

14. 创建对象时所用的模板类型必须和声明的一致,不能降级构造;例如:继承自 transaction 的自定义对象 n_tran_base,声明为 n_tran_base itran_obj,则实例化时不可以写成 itran_obj = create transaction,而必须是 itran_obj = create n_tran_base(赋值、比较操作同理)。

15. 数据库驱动目录须要设置 asp.net 的访问权限(重启),如 c:\oracle\product\10.1.0\client_1。

16. 要使用 sybase datawindow ps 打印机,需要在打印机的安全设置里添加上 asp.net, internet 来宾, network service, 启动 iis  四个账号为允许打印(第一次打印时必须设置,之后可以删除),方可确保 PrintDatawindow(), Print(), SaveAs() 能正常生成 pdf 文件(但 db ole 控件的内容不能显示)。

17. 可以通过 inet 和 internetresult 两对象的配合,获得 /app_root/print/session/__webservice__ 打印目录下的文件列表,并分析出打印后的正确文件名;同理,亦可用此方法获得 pdf 文件的内容。

18. (尚待进一步研究)Run() 函数已失效,可用 API 替代,如 CreateProcess() 启动服务端的 exe 文件,但受限于 iis 的权限控制,只能在任务管理器中看到此进程,并不能正常运行(即便是无界面的 exe 也是如此)。

19. (尚待进一步研究)据 sybase 新闻组的说法,ole 对象在 .net 应用中无法使用,这并不是 pb 的限制,而是微软自身的问题。所以 db ole 控件也失效了,如果仍想在客户端使用的话,可在检索含有 db ole 的数据窗口时转交给 c/s 程序执行,然后再传回 ws。

20. 关于进程间通讯,DDE 仅能建立管道,但无法执行链接;Send() 函数已失效,只有通过 API SendMessage() 向服务端进程发送消息(ws 没有窗口句柄,不能收到消息),本应使用 WM_COPYDATA 通过共享内存来传递数据(在 other 中拦截 message.number=74),但服务端进程收到的却是错误数据;既然只能传递消息本身,倒不如用 pbm_custom01(1024) 更加简单。

21. 若数据库驱动不能使用 iis 连接池的话,则必须在 ws 执行完成后,由代码主动断开连接;由于 ws 的析构事件不会执行,所以必须在每个接口函数返回前断开连接;并且 destroy 所有手工 create 的对象,否则会导致系统内存溢出错误。

22. 调用 ws,如果应用服务器需要身份验证,则除了需要通过 SetOption() 分别设置用户名和密码外,还要调用 SetProxyServer() 指定应用服务器的地址和端口,否则会导致 401 错误(权限不足)。

23. 调用 ws,如果出现莫明其妙的异常或服务方接收不到参数,就要检查服务方提供的 wsdl 文件是否有问题,例如函数名和参数名以及大小写是否与对方 ws 代码中的一致。

24. 函数的参数必须使用标准数据类型,否则发布时会导致 c# 编译器调用 pbwsemit.exe 错误。(blob 相当于 byte 数组,而且 blob 数组也强制等同于 byte 数组)

25. GetFullStatus() 只能获取 8M 左右的数据,超过的数据部分会被忽略或产生异常。

共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
yyss22

主题

0

回帖

203

积分

中级会员

积分
203
贡献
在线时间
小时
2010-9-16 08:24:04 | 显示全部楼层
你好!最近,我也在用pb12,希望向你学习,请问有QQ号吗?
共享共进共赢Sharing And Win-win Results
msgtogcr 楼主

主题

0

回帖

1904

积分

金牌会员

积分
1904
贡献
在线时间
小时
2010-9-16 21:25:42 | 显示全部楼层
本帖最后由 msgtogcr 于 2010-9-16 21:31 编辑

你好,楼上的朋友!我基本上不用 QQ,而且我觉得真的需要交流的话,论坛其实就是很好的地方,无论是否解决问题,都可能让更多人受益,何乐而不为呢,你说是吧。

pb12 我也才用一个月,主要是为了使用 webservice,所以目前一切也仍在摸索阶段,很高兴与大家一起探讨,共同提高!
共享共进共赢Sharing And Win-win Results
yyss22

主题

0

回帖

203

积分

中级会员

积分
203
贡献
在线时间
小时
2010-9-17 08:11:38 | 显示全部楼层
请问:在PB12.net中,怎么 引用外部的 dll 文件?在哪里操作?
共享共进共赢Sharing And Win-win Results
msgtogcr 楼主

主题

0

回帖

1904

积分

金牌会员

积分
1904
贡献
在线时间
小时
2010-9-17 22:45:06 | 显示全部楼层
你是用 .net 的 ide 做开发么?如果是的话,我就不知道了,因为目前那只是个测试性的东西,而且也只能做 wcf 和 assemble 这两种东西,我是一点也没有研究啊!不过,我觉得搞 asp.net 的程序员应该会清楚,pb.net 估计不会另搞一套的。
共享共进共赢Sharing And Win-win Results
hayado

主题

0

回帖

71

积分

注册会员

积分
71
贡献
在线时间
小时
2011-1-8 23:02:52 | 显示全部楼层
楼主辛苦了,希望能多些交流
共享共进共赢Sharing And Win-win Results
msgtogcr 楼主

主题

0

回帖

1904

积分

金牌会员

积分
1904
贡献
在线时间
小时
2011-1-9 22:11:30 | 显示全部楼层
楼上兄弟客气了,只是目前手头事有点多,ws 的研究进展很慢,我写这篇东西的目的本来就是希望能与各位同道交流心得,自己也可以少走些弯路。
共享共进共赢Sharing And Win-win Results
zbplayer

主题

0

回帖

1487

积分

金牌会员

积分
1487
贡献
在线时间
小时
2011-1-25 00:00:10 | 显示全部楼层
这个还得看看,用的上!
共享共进共赢Sharing And Win-win Results
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2024-5-13 22:38 , Processed in 0.052725 second(s), 9 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表