我有ASP.NET Web Api項目,我需要使用VB6 COM DLL。我有一個控制器,在那裏我從com創建類的對象,並在我的動作中使用該對象。當我從ca調用該動作時,一切似乎都奏效。 2000-2500線程,但是當我從多個線程運行它,然後我得到這個錯誤在創建COM對象實例:ASP.NET Web Api與COM DLL
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.NET Web Api項目中將模式更改爲STA。
我使用自我託管的ASP.NET Web Api,並將其託管在Windows Service上。當我停止服務並再次運行時,我可以再次發送ca. 2500線程。
編輯: 我創建了樣本窗口應用程序線程是這樣的:
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,所以我不知道什麼是錯的。
這不會工作,你的機器會阻塞這些線程,最大線程是由機器默認的,我認爲它受到你的處理器核心的限制。 – IamStalker
但是當我不叫COM對象時,我沒有任何問題。 –
我認爲你並不是這樣做的。 – IamStalker