当前位置: 代码迷 >> PB >> PB11.5创造web service发布时出错Unknown error when invoking pbwsemit.exe
  详细解决方案

PB11.5创造web service发布时出错Unknown error when invoking pbwsemit.exe

热度:47   发布时间:2016-04-29 07:20:13.0
PB11.5创建web service发布时出错Unknown error when invoking pbwsemit.exe.
发布web service时候出现这个错误。

Unknown error when invoking pbwsemit.exe.


运行环境是xp sp3 .net2.0 IIS5.1 pb11.5 


------解决方案--------------------
你的程序放在中文目录下了吧,必须放在英文目录下!
------解决方案--------------------
你装的是“Microsoft .NET Framework 2.0 版可再发行组件包”还是“Microsoft .NET Framework 2.0 软件开发工具包 (SDK)”,如果要发布PB做的Web Service需要后者。
------解决方案--------------------
大概是这个:C:\Windows\Microsoft.NET\Framework\v2.0.50727
------解决方案--------------------
引用:
试一下把 .Net 2.0 的安装文件夹加入系统的 path 环境变量。


环境变量里把2.0的放前面,不要有重复的
------解决方案--------------------
正在把一个 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 控件的内容不能显示)。
  相关解决方案