通过QBXML连接到已打开的Quickbooks实例

通过QBXML连接到已打开的Quickbooks实例,quickbooks,qbxml,Quickbooks,Qbxml,我正试图帮助一个拥有通过QBXML SDK与Quickbooks集成的web应用程序(ASP/C#)的客户机 我想在用户会话中打开与已处于活动状态的QuickBooks实例的连接 有关守则: if (rp == null) rp = new RequestProcessor2(); if (!connected) { rp.OpenConnection2("IMS", "Internal Management System", QBXML

我正试图帮助一个拥有通过QBXML SDK与Quickbooks集成的web应用程序(ASP/C#)的客户机

我想在用户会话中打开与已处于活动状态的QuickBooks实例的连接

有关守则:

    if (rp == null)
        rp = new RequestProcessor2();

    if (!connected)
    {
        rp.OpenConnection2("IMS", "Internal Management System", QBXMLRPConnectionType.localQBD);
        connected = true;
    }

    if (xticket == null)
        xticket = rp.BeginSession(cfg.qbfile, QBFileMode.qbFileOpenMultiUser);
目前,这将尝试通过DCOM启动Quickbooks的新实例,这不是一个可行的选项。在QBSDK文档之后,我尝试将null传递给BeginSession的第一个参数,该参数应使用打开的qbw文件

但是,它启动了一个新实例,而不是预期的连接到运行中的Quickbooks实例的操作,最终产生错误:

如果QuickBooks公司数据文件未打开,则对“BeginSession”方法的调用必须包含数据文件的名称

运行web应用程序的IIS应用程序池使用与我尝试连接的Quickbooks实例相同的用户

这一切都是由不再可用的第三方建立的,当然,他们没有留下任何关于该系统如何工作的文档。欢迎提供任何援助

我正试图帮助一个拥有通过QBXML SDK与Quickbooks集成的web应用程序(ASP/C#)的客户机

不幸的是,这种方法行不通

QuickBooks的一个众所周知的限制是:

  • QuickBooks必须在您尝试从中连接的用户会话中运行
  • QuickBooks必须能够访问GUI(它使用GUI消息泵运行)
  • 因为您的web应用程序是从IIS中运行的,所以这两个条件都不满足,到QuickBooks的连接将失败。您应该改用QuickBooks Web连接器

    我想在用户会话中打开与已处于活动状态的QuickBooks实例的连接


    不幸的是,QuickBooks不允许这样做。

    我设法为我的问题创建了一个可接受的解决方案,供任何尝试类似方法的人使用。(老实说,我不推荐这样做。我在这里使用的是遗留代码。)

    首先,简要概述我的研究:

    QuickBooks的QBXml接口使用COM请求进行通信。现在,无论出于何种原因,无论是设计、bug还是COM中的限制,Quickbooks都无法跨平台进行通信。实际上,这意味着运行Quickbooks的同一控制台会话也必须运行QBXml代码。此外,Quickbooks和应用程序必须具有相同的UAC提升状态

    我没有找到让IIS可靠地启动Quickbooks的方法。在我之前设置此系统的个人通过一些非常。。。非正统方法。这是令人难以置信的脆弱,并导致多个问题

    不管怎么说,我确实设法找到了一个可以接受的解决办法,形式是。IIS Express可以在标准用户会话下运行。因此,在同一登录会话下运行Quickbooks和web应用程序(通过IIS Express)可以使它们成功通信

    这不是一个永久性的解决方案,因为在标准用户范例中运行这样的服务有缺点,但它是一个可接受的解决方法,并允许我的客户在我们重构时运行他们的业务。我计划首先将应用程序中与Quickbooks通信的部分解耦,将它们移动到自己的代码库中。这将允许应用程序面向web的部分以更标准的方式运行,并通过比COM调用更可靠的方式与QB集成代码通信


    感谢Keith Palmer为我指明了正确的方向。

    Web connector目前不是一个可行的选择,因为它需要对传统应用程序进行彻底的重新设计。此外,您似乎在说,在用户会话中运行quickbooks是不可能的,也是必需的。此外,该应用程序确实成功连接到由DCOM自动启动的quickbooks实例。我不知道怎么做,但我知道。我在哪里说过不可能在用户会话中运行QuickBooks?执行您要求的操作的唯一受支持的方法(也是唯一可靠的方法)是让web应用程序本身在运行QuickBooks的同一个普通用户GUI会话中运行。您说过QuickBooks不允许我连接到在用户会话下运行的实例。(回答的最后一句)我可能误解了某些部分,这就是我要求澄清的原因。此外,可靠或支持在这里是无关的,只有可能的事情。这是由不可靠的第三方制作的遗留应用程序。最终的目标是完全重写,但我的客户端在此之前无法承受,因此我需要首先修复这个被黑客攻击的黑匣子。关于这个问题的一些额外背景:正如我提到的,该应用程序将通过DCOM启动Quickbooks实例(在与控制台会话相同的用户下,但在不同的登录会话下)。它会打开公司文件。但是,相关Quickbooks实例(自升级后)将显示一个模式对话框,等待用户输入。但是,当模式对话框打开时,Quickbooks不会响应COM请求,并且我没有办法(我已找到)关闭该对话框,因为GUI处于不同的登录会话中。据我所知,并且根据Intuit支持和文档所说的一切,您无法打开到QuickBooks的连接,从IIS实例到在单独用户会话中运行的QuickBooks会话。这就是我最后一句话的意思。