【问题标题】:Cannot create COM object from ASP.NET (Creating an instance of the COM component with CLSID {} from the IClassFactory failed... error: 8007000e)无法从 ASP.NET 创建 COM 对象(从 IClassFactory 创建具有 CLSID {} 的 COM 组件实例失败...错误:8007000e)
【发布时间】:2014-12-11 22:33:38
【问题描述】:

我有一个 API DLL,它是一个 COM 对象。我已经在 Winforms 应用程序中成功使用了这个 DLL。当我在 ASP.NET 应用程序中使用它时,我在创建 COM 对象的实例时得到E_OUTOFMEMORY error: “Creating an instance of the COM component with CLSID {} from the IClassFactory failed due to the following error: 8007000e”

虽然我不认为这是一个安全问题,但我尝试过使用 windows 身份验证,并且还给 ASPNET 用户授予权限,但没有任何用处。

我没有 COM 对象的源代码。 我正在使用 .NET Framework 3.5。

提前致谢, 莎朗。

【问题讨论】:

  • 如果 ASP.NET 应用程序在与 winforms 应用程序具有相同用户 ID 的应用程序池下运行,它是否工作?还有它在 windows 事件查看器中说什么
  • 实际问题出现在使用ASP.NET开发服务器的开发环境中。我还没有将它发布到 IIS。开发服务器使用与 winforms 应用程序(我自己的)相同的凭据运行,尽管我不确定使用开发服务器的网站的凭据是什么。事件查看器中没有任何内容。

标签: asp.net com


【解决方案1】:

Visual Studio / 工具 / 错误查找显示:

"Not enough storage is available to complete this operation."

这不一定是 OOM 异常,我在序列化中遇到过这样的情况,其中反序列化对象大小静默失败返回 -1,并且随后的分配失败并出现 OOM 异常(因为通常 (unsigned)-1 == all除了一个元素之外的内存)。

【讨论】:

  • 我认为实际消息取决于错误的来源。反正。 .NET 用 system.outofmemoryexception 包装它。这可能是这种情况下的场景,但我没有 COM 对象的源代码,所以我无法检查它。我正在尝试联系 API 的开发人员,但我不确定他能否提供帮助。
  • “取决于来源” - 只有当设施是 FACILITY_ITF (0x8004xxxx) 时才会出现这种情况。这个是一个`HRESULT_FROM_WIN32`,应该是独立于接口的。
  • 好的,我接受更正。但它仍然具有相似的含义(或者我在这里遗漏了什么?)。这两个应用程序的主要区别在于第一个是winforms,第二个是ASP.NET。如果我知道 COM 对象在它的实例化中做了什么,我可以判断报告的错误是否是先前错误的结果。在没有源代码的情况下如何继续调查?
  • 一般情况:尽量在最小环境下重现,如果仍然出现,请询问开发者。如果不是,请检查两个环境之间的差异,并一一消除。
【解决方案2】:

经过数小时的调查,我们发现问题出在 API 上。

谢谢大家。

莎朗。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-07
    • 2016-09-10
    • 1970-01-01
    • 2011-03-05
    • 2019-07-11
    • 2017-04-21
    • 1970-01-01
    • 2012-09-04
    相关资源
    最近更新 更多