2010-09-08 55 views
0

我正在使用QBXML方法与本地计算机上的QuickBooks进行通信(不是远程,不使用Web连接器)。使用Perl的QuickBooks SDK在命令控制台中工作,而不是CGI?

我有一个非常基本的脚本,它只连接到QuickBooks并检查客户是否存在。当通过命令控制台(Windows XP)运行时,该脚本完美地工作,但当以CGI的形式运行时,相同的脚本无变化无效。

当作为CGI运行时,脚本不会从QuickBooks获取响应XML。其他一切看起来功能完全一样 - 只是没有从QuickBooks收到XML响应。

昨晚我在头撞墙撞了2个小时试图弄清楚......没有成功。

+0

CGI脚本位于何处?您是否使用作为系统服务启动的Web服务器,或者使用同一台计算机上的用户帐户? – 2010-09-08 14:25:55

回答

2

一般来说,当某些东西在命令行上工作时,而不是在另一个环境中时,这意味着你缺少环境变量或者有权限问题。

您可以通过说出

#!/usr/bin/perl 

print "Content-type: text/plain\n\n" 
print "$_ => $ENV{$_}\n" for keys %ENV; 
两个

命令行,并通过CGI诊断的环境变量。

+0

当然,顶部有一个'print'Content-type:text/plain \ n \ n“'。 – mob 2010-09-08 14:46:28

+0

@mobrule谢谢,我今天真的离开了我的比赛。 – 2010-09-08 14:51:57

0

事实证明,这不是代码或环境,似乎对于这种特殊情况(QB SDK,OLE/XML),在Apache作为服务运行时,从QuickBooks获取响应XML的能力是问题。通过控制台运行Apache。当然,这是不可行的,因为我需要它作为服务运行,所以我将使用Abyss Web Server来代替它,它可以很好地工作。

+0

是的,或者在另一个用户下运行Apache,而不是SYSTEM,默认情况下它没有网络访问权限。 – MkV 2010-09-15 08:11:13

0

QuickBooks桌面SDK连接在从服务调用时被拒绝。这是intuit强加的有意限制,但是我所知道的原因从来没有透露过。应用程序必须在交互式登录用户的上下文中运行以建立连接。我不确定为什么Abyss Web Server能够运行,它是否在与帐户相关联的帐户下运行,并与其进行交互登录?

它曾经有可能通过服务打开SDK连接,但帐户限制几年前就出现了,没有任何吹嘘或解释。有一个解决此问题的方法:可以使用DCOM作为单独的进程启动SDK请求程序,然后使用DCOM配置为DCOM进程分配适当的帐户。您可以在SDK文档和Intuit论坛中找到有关如何执行此操作的详细信息。

0

保罗,原来深渊有同样的问题,我曾经想过,它最初安装时,它是作为服务运行。重启后,与Apache相同的问题。在任何情况下,当QB未运行时,在更改QB文件时,我也注意到很多不稳定&没有打开文件。不是最好的设置,但现在最重要的是,我正在做的工作,最后,没有奇怪的行为或错误。所以结论是:

  • 如果通过Web服务做QB SDK的东西,至少如果Web服务器在同一系统QB上运行,Web服务器必须从命令运行(作为控制台应用程序)而不是服务。

  • 最好不要让集成应用程序在关闭时更改QB文件& QB未运行。这一个更烦人,但现在我只是要去做什么工作。

  • 现在我将跳过DCOM的解决方法,不熟悉通过Perl来做这件事。

我只希望QB处理速度更快。在1.6GHz的上网本上进行测试需要6-20秒的时间来进行最少的处理。但是,由于能够自动化大量的东西而不是弥补处理缓慢,所以速度变得更快了。

相关问题