我有一个与Delphi 2010构建的本机Web Service应用程序(ISAPI)。目前,它仅公开两种方法。第一个,即Echostring,旨在给我Web服务正常运行的反馈,并在我从Delphi Web服务客户端发送给它的字符串中添加了几个字符。这总是很好。

第二个暴露的方法是我真正感兴趣的方法。我通过此方法包含客户端dataset的XML内容的字符串。从服务器端,我的代码将此XML插入并将其插入客户端数据库,然后将此数据发布到服务器端数据库。

我正在使用IBExpress组件(IBDATABASE,IBTRANSACTION,IBQUERY等)连接到服务器端上的InterBase数据库。

问题是,一旦我尝试将IBDATABASE组件连接到其数据库,Web方法就会失败。我认为我已经排除了所有其他资源的错误。我可以使用从客户端发送的XML XML创建和填充客户端DataSet,其中包含嵌套数据集而没有问题(我使用的是Midaslib单元,因此ClientDataSet不尝试加载DLL)。我可以创建和配置IBDATABase及其各种组件的连接不足。同样,没有问题。一旦将IBDATABASE组件的连接属性设置为来自Web服务中的True,它就会失败。

我在Windows 7 64位Ultimate(在我的开发机上)运行IIS 7.5。我尝试向所有人(以及特别向IIS_IUSRS)授予特定的ISAPI DLL以及Web服务所居住的整个目录。这无法解决问题。

我怀疑这完全是IIS 7的特权问题。我该怎么做才能允许我的ISAPI Web服务连接到InterBase客户端API,以便我可以使用Web服务写入我的数据库服务器? '''''''''
帖子脚本:似乎从Web服务连接到InterBase不是问题。我仍在跟踪确切的原因,但是现在我能够从Web服务中成功连接到InterBase。一旦知道原因,我将更新此帖子,但是这个问题不再有效。 ''''''
我将鲍勃的答案标记为正确的答案。连接字符串是错误的。实际上(这很尴尬,但我宁愿感到尴尬而不是误导),我被一个 条款。

我将连接信息存储在资源字符串中。我把任务做了 条款。 DataBaseName属性的资源字符串名称是DataBasEname。这 子句导致DataBaseName属性被分配给自身,而不是资源字符串中的值。我通过将DataBaseName资源字符串带有单位名称(即DatabasEname:= ibmodunit.databasename;)来解决问题。

有帮助吗?

解决方案

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

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

其他提示

编辑
对不起。我写了一件愚蠢的事情,暗示IIS不会拥有网络权限u003Cduh!>而且我似乎无法删除这篇文章!

但是 - 我确实在某个地方读到,后来的Windows版本上的服务权限已稍微减少,而本地系统帐户不再具有网络访问权限。看到帖子标题包含“远程”,也许您需要授予您的DLL或服务和/或InterBase Service或其他涉及的其他文件之一?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top