У меня есть проект ASP.NET Web Api, где мне нужно использовать VB6 Com dll. У меня есть один контроллер, где я создаю объект класса из com dll и использую этот объект в своем действии. Кажется, все работает, когда я вызываю это действие с ок. 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).
Я обнаружил, что компоненты ком работают в режиме Thread STA, но ASP.NET Web Api в MTA Thread mode, но я не знаю, вызвало ли это проблему, потому что я не мог найти ничего, как изменить режим STA в проекте ASP.NET Web Api.
Я использую сам Host ASP.NET Web Api, и я размещаю его в службе Windows. Когда я остановлю службу и запустил ее снова, я снова могу отправить ca. 2500 потоков.
EDIT: Я создал темы в приложении образец окна, как это:
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