0

我有一个使用 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;)来解决这个问题。

4

2 回答 2

1

我假设您可以使用相同的连接字符串从该机器上的“本机”VCL Forms 应用程序连接到 InterBase 数据库?

也许是一个愚蠢的问题,但是您是否将 InterBase 作为服务运行?(否则,ISAPI DLL 将无法“看到”它以连接到它)。

于 2010-10-11T05:32:30.677 回答
0

[编辑]
对不起。我写了一个愚蠢的东西,暗示 IIS 没有网络权限 <duh!> 我似乎无法删除这篇文章!

但是 - 我确实在某处读到过,更高版本的 Windows 上的服务权限已经有所减少,并且本地系统帐户不再具有网络访问权限。看到帖子标题包含“远程”,您可能需要为您的 DLL 或服务和/或 Interbase 服务或涉及的其他文件之一授予额外权限?

于 2010-10-11T08:06:11.527 回答