【问题标题】:COM+ Activation Library crashes .Net v4 worker processCOM+ 激活库崩溃 .Net v4 工作进程
【发布时间】:2021-10-29 11:22:33
【问题描述】:

有一个 .Net (v4.6) WebAPI 具有用 VB6 编写的遗留中间件。在 COM+ 应用程序中,大多数中间件都是 COM DLL。 通常在用户很少的情况下,HTTPrequest 调用这些 COM DLL 中的任何一个,IIS 工作进程崩溃,现在这是不一致的。

事件日志有崩溃日志 由于为该应用程序池提供服务的进程中出现一系列故障,应用程序池“MyAppPool”被自动禁用。

发生了一种情况,表明此 COM+ 应用程序处于 状态不稳定或无法正常工作。断言失败: m_guidLogicalThread == GUID_NULL

服务器应用程序 ID:{56C23B4E-EF46-4C46-9ABA-8CFAA386745E} 服务器 应用实例 ID:{02DC69D6-B20F-4FB6-B1F2-B61AE32D5D51} 服务器 应用程序名称:GMT_PrimeSuite 此错误的严重性已 导致进程终止。 COM+ 服务内部信息: 文件:com\complus\src\comsvc​​s\jit\jit.cpp,行:31 Comsvc​​s.dll 文件 版本:ENU 2001.12.10530.18999 shp

以下是如何创建 COM 实例及其方法的示例代码。

dynamic comInstance =  Activator.CreateInstance("Example.ISample");
comInstance.DoSomeWork();

【问题讨论】:

  • 能否请您看一下this post,检查代码是否对您的问题有帮助?
  • @HuryShen 感谢您分享帖子,在问题上下文中,我们发现 10 行的 ADO.RecordSet 可以正常工作,并且对 ASP.Net 工作进程没有任何问题,但是当行超过 100 时,我们观察到有点慢,最终在 ~200 个请求之后 ASP.Net 工作进程崩溃。此外,这些 COM+ dll 是库激活,由于多个应用程序可访问性,我们无法使其成为服务器激活

标签: asp.net-mvc iis com vb6 com+


【解决方案1】:

经过大量调查和测试,发现后期绑定(即运行时 COM 实例)是罪魁祸首,使所有 COM DLL 直接引用嵌入的 COM 互操作类型,并将 Activator.CreateInstance 替换为类型的对象创建(早期绑定),即我们的正常的 IEmployee ref = new ..... 这使得 COM 的资源消耗和管理得到了显着改善。来自提琴手的约 7000 个 HTTP 请求使得封装 COM 调用没有看到 Complus 异常以及 App-pool 不再崩溃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多