Существует ли максимальное количество COM-подключений?

#com #com #dcom

#com #com #dcom

Вопрос:

Приложения запускают несколько других приложений (компонентов) с помощью (D) COM . Однако, похоже, существует какой-то максимум, который может быть запущен на сервере.

Основное приложение написано на c #, остальные компоненты — на Visual Objects, 32-разрядные.

Я видел эту проблему в нескольких версиях Windows, включая версии Win 7 prof и 2008 server.

В зависимости от того, как запускается компонент, я получаю class does not exist или

Retrieving the COM class factory for component with CLSID {50495402-21B7-11D4-A041-00A024E1D270} failed due to the following error:
80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).

В последнем случае системный журнал событий сообщает:

 Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"
System
Provider Name="Win32k"
EventID Qualifiers="32768" : 243 
Level : 3 
Task  : 0 
Keywords : 0x80000000000000
EventRecordID : 36855
Channel : System
computer : W151.piramide.lan

EventData
 Data 
 Binary : 000000000100000000000000F3000080000000000000000000000000000000000000000000000000 
 

Например, я застрял на своей машине с 48-50 компонентами.

В более ранней версии основного приложения (написанного на визуальных объектах) Я могу подключить 273 компонента.

Какие-либо подсказки / идеи?

Комментарии:

1. Теоретического ограничения на количество COM-объектов, которые вы можете запускать, не существует, хотя, естественно, если вы будете достаточно стараться, у вас в конечном итоге закончится какой-то ресурс. Вы должны посмотреть на объект / программу сервера или на то, как вы его используете, чтобы понять, почему он выходит из строя (попробуйте добавить к нему некоторые записи?). Вот что означает CO_E_SERVER_EXEC_FAILURE: «DCOM запустил процесс для обслуживания запроса объекта, но процесс не ответил на запрос». В вопросе нигде нет достаточной информации, чтобы рискнуть предположить, кроме «проблема почти наверняка не вызвана COM»

2. Любые намеки на то, какие ресурсы это могут быть? Я уверен, что это не общая память.

3. Вы могли бы начать с поиска информации о событии. Быстрый поиск по ‘eventid 32768 243’ возвращает кучу совпадений с фразой «сбой выделения кучи рабочего стола». Звучит как хороший намек. Изучите эту фразу и посмотрите на свою программу, чтобы увидеть, что может потреблять так много кучи рабочего стола.

4. Ваши компоненты создают слишком много окон, что-то под названием «Визуальные объекты» было бы подсказкой. Конечно, никто не видит, поскольку они выполняются в сеансе 0. Который по умолчанию использует небольшую кучу рабочего стола, поскольку службы не должны создавать много окон. Вам нужно увеличить размер кучи, что хорошо описано здесь .

5. @Hans Passant «Визуальные объекты» — это язык программирования CA, GrafxSoft, см. Ссылку . Я проверю возможность увеличения кучи рабочего стола и посмотрю, в чем может быть разница между двумя сценариями.