* * * 编辑:问题已解决 - 至少在我的机器上 * * *
我从我在这里找到的线程中得到了提示,并开始检查发生这些错误时 PowerBuilder 发生了什么——无论是在导入 PBX 期间,还是在执行示例应用程序的运行时期间。
线程中的一个人提到这个问题与libeay32.dll和ssleay32.dll有关。这不是 OpenSSL 第一次让我适应这些组件——我的硬盘驱动器在各种应用程序文件夹中散落着它们。这些 DLL 在导入 PBWSCLIENT105.PBX 扩展时由 PB 加载,或者由在运行时使用关联的 PBD 的应用程序加载。果然,通过使用ProcMon,我能够确认libeay32.dll和ssleay32.dll是从Windows\System32加载的,而不是位于 PB 文件夹结构中的相同 DLL 的版本。显然,这是一个问题。我重命名了位于System32中的两个 DLL为了有效地删除它们,启动了 PB,导入 PBWSCLIENT105.PBX 就像一个魅力。
我们的 PB 10.5 安装也有类似的问题。导入 PBX 文件给了我错误消息:
---------- Import PB Extension:
Importing C:\Program Files\Sybase\Shared\PowerBuilder\pbwsclient105.pbx - Error: The file is not a valid dll or pbx file.
---------- Finished
我最初认为问题是文件损坏等。但是,我在一台干净的机器(实际上是一个 VM)上安装了 PB 10.5 以及 .Net 2.0 SDK,并且导入工作完美无缺;另外,我可以调用网络服务。我小组中的每个开发人员在他们自己的机器上都有同样的问题,但如果他们使用“干净”的机器或安装了 PB 的 VM(可能还有一些其他应用程序),则 PBX 文件的导入没有问题。
在这一点上,我试图确定环境中导致问题的原因,但还没有。正如您所指出的,有趣的是,如果您打开示例应用程序,您可以看到完全相同的导入库。但是,您会在运行时收到错误消息。所有这一切都真正指向了一些环境缺失或错误注册的东西。因此,如果您有能力使用 VM,我建议您将其作为临时解决方法。
我将在此处添加一件事:如果您碰巧使用 Vista 或 Windows 7 作为您的 VM,则库的导入工作正常,但我在使用 .Net Web 服务引擎生成客户端代理时遇到了问题。我终于发现,在后台,SDK 工具 WSDL.exe 正在针对服务的 WSDL 执行,以生成 .Net 客户端代理。结果是 Vista/Win7 用户访问控制阻止了 WSDL.EXE 运行。我以“管理员”身份运行 PowerBuilder,就生成客户端代理而言,一切都按预期工作。
如果您发现任何有关 PBX 导入不起作用的原因,我很想听听!