我有一个使用 Delphi 2010 构建的本机 Web 服务应用程序 (ISAPI)。此时,它只公开了两个方法。第一个是 EchoString,旨在向我提供 Web 服务正常运行的反馈,它在我从 Delphi Web 服务客户端发送给它的字符串中添加了几个字符。这总是很好。
第二个公开的方法是我真正感兴趣的方法。我向该方法传递了一个包含 ClientDataset 的 XML 内容的字符串。从服务器端,我的代码获取这个 XML 并将其插入到 ClientDataset 中,然后将这些数据发布到服务器端数据库。
我正在使用 IBExpress 组件(IBDatabase、IBTransaction、IBQuery 等)连接到服务器端的 InterBase 数据库。
问题是,一旦我尝试将 IBDatabase 组件连接到其数据库,Web 方法就会失败。我想我已经排除了这个错误的所有其他来源。我可以使用从客户端发送的相当大的 ClientDataSet 的 XML 创建和填充 ClientDataset,其中包括没有问题的嵌套数据集(我使用的是 MidasLib 单元,因此 ClientDataSet 不尝试加载 DLL)。我可以创建和配置,而不是连接到 IBDatabase 及其各种组件。再次,没有问题。一旦我在 Web 服务中将 IBDatabase 组件的 Connected 属性设置为 True,它就会失败。
我在 Windows 7 64 位 Ultimate 下运行 IIS 7.5(在我的开发机器上)。我已经尝试向每个人(特别是 IIS_IUSRS)授予对特定 ISAPI DLL 以及 Web 服务所在的整个目录的完全控制权限。这并没有解决问题。
我怀疑这完全是 IIS 7 的权限问题。我可以做些什么来允许我的 ISAPI Web 服务连接到 InterBase 客户端 API,以便我可以使用 Web 服务写入我的数据库服务器?' ' ' ' ' ' ' ' ' ' '
Post Script: 从 Web 服务连接到 Interbase 似乎没有问题。我仍在追查确切的原因,但我现在已经能够从 Web 服务中成功连接到 Interbase。一旦我知道原因,我会更新这篇文章,但这个问题不再有效。' ' ' ' '
我将 Bob 的答案标记为正确答案。连接字符串错误。实际上(这很尴尬,但我宁愿尴尬也不愿误导),
我将连接信息存储在资源字符串中。我在with子句中进行了分配。DatabaseName 属性的资源字符串的名称是 DatabaseName。with子句导致将 DatabaseName 属性分配给自身,而不是资源字符串中的值。我通过在 DatabaseName 资源字符串前面加上单元名称(即 DatabaseName := IBModUnit.DatabaseName;)来解决这个问题。