【问题标题】:COM Interop fails when moving to new server移动到新服务器时 COM 互操作失败
【发布时间】:2013-11-07 17:19:44
【问题描述】:

我遇到了一个我似乎无法解决的问题。背景:多年前,我使用 ASP 2.0 和 Ajax 为我的一位客户开发了一个网站。该网站的一项功能是按需生成客户发票。他们的内部生产系统是用 Visual Foxpro 8 编写的,后端是 SQL Server 2005。因为我已经有一个可以生成 PDF 文件的发票生成对象,所以我汇总了一个 COM EXE 并创建了一个 COM 包装器以在我的 ASP 页面中使用。它多年来一直运行良好,但现在我们正试图将页面移动到不同的位置,但效果并不好。

网络技术人员重新制作了环境,网站的其余部分运行良好。我什至可以实例化 COM 对象(我已经记录了 init 并且一切都很好),但是对其中一个对象方法的第一次调用会导致“来自 HRESULT 的异常:0x80010105 (RPC_E_SERVERFAULT))”。我只是卡住了!

以下是有效的:

1) 使用来自同一服务器的可视化 foxpro 程序,我可以实例化对象,调用生成发票方法并生成 PDF - 没问题。

2) 在一个非常简单的 ASP 页面中使用 VBScript 我可以使用 Server.CreateObject() 来实例化对象并从那里成功生成发票。

目前我知道:

1) 对象已正确注册,并以正确用户身份启动,拥有开展业务所需的所有权利。

2) COM EXE 和 COM 对象版本的包装器匹配。

我为这篇冗长的帖子道歉。长话短说:为什么 ASP.NET 在成功实例化后无法调用 VFP COM 对象的任何方法?

在此先感谢 - 我严重卡在这个问题上。

埃里克

【问题讨论】:

    标签: asp.net com .net-2.0 foxpro


    【解决方案1】:

    对于那些遇到相同情况的人,adding the COM EXE to the Data Execution Prevent (DEP) exception list 允许调用对象方法。

    【讨论】:

    • 所以请接受您的正确答案,这样我们可以很容易地看到问题已经解决。见accepting answers。 ;)
    【解决方案2】:

    您是否将其编译为 EXE、运行时 DLL 或多线程 DLL。此外,我之前遇到的一个问题是 OlePublic dll 条目的单个或多个实例。要确认,请修改您的项目...然后从顶部菜单中单击“项目”,然后单击“项目信息”。第三个选项卡是“服务器”,显示项目中可用的服务器。在它的右侧是“实例化”,这将是单个或多个。有时,只需将其扔给单身就可以为我解决实例。但是,如果是多线程,请确保您也有多线程 dll.. VFP9T.DLL

    --- 编辑每个响应... 由于您将其编译为 EXE,因此它可能会显示为分布式 COM 对象。转到 Windows“开始”,然后运行“DCOMCNFG”,这将打开 DCOM 配置管理器。您必须向下滚动项目列表,直到找到您的 exe(OlePublic 类名称),并且可能需要修改权限,谁可以启动/访问/执行...应用模拟等...

    仅用于测试 --- 您可以将此 COM 服务器设置为模拟管理员 -- 只是为了测试并查看是否有任何错误。如果没有错误,那么您将知道它是权限问题,然后将其更改回更受限制的用户。

    【讨论】:

    • 谢谢回复!我编译成COM EXE
    • 在研究了这个问题的废话之后,我找到了解决方案。将 COM 对象添加到数据执行阻止 (DEP) 异常列表允许方法调用,并且世界再次一切正常。感谢您的时间和关注 - 真的很感激!!!
    猜你喜欢
    • 2012-06-27
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 2010-12-25
    • 2010-11-11
    • 2017-02-10
    • 1970-01-01
    • 2016-08-03
    相关资源
    最近更新 更多