我有 ASP.NET Web Api 项目,我需要在其中使用 VB6 Com dll。我有一个控制器,我在其中从 com dll 创建类对象并在我的操作中使用该对象。当我从 ca 调用该操作时,一切似乎都有效。2000-2500 个线程,但是当我从更多线程运行它时,在创建 com 对象实例时出现此错误:
Creating an instance of the COM component with CLSID from the IClassFactory failed due to the following error: 800401f7 (or 800a01b8).
我发现com组件在STA线程模式下运行,但ASP.NET Web Api在MTA线程模式下运行,但我不知道这是否导致问题,因为我找不到任何如何在ASP中将模式更改为STA。 NET Web API 项目。
我使用自托管的 ASP.NET Web Api,并将其托管在 Windows 服务上。当我停止服务并再次运行它时,我可以再次发送 ca. 2500 个线程。
编辑:我在示例 Windows 应用程序中创建了这样的线程:
for (int i = 0; i < threadsCount; i++)
{
Task task = Task.Factory.StartNew(() => {
for (int j = 0; j < loopCount; j++)
{
SendRequest();
}
});
}
EDIT2:可能 com 对象没有被释放,因为在任务管理器中我可以看到句柄长大,当它有 2000 多个句柄时我得到这个错误。我打电话给 Marshal.ReleaseComObject,所以我不确定哪里出了问题。