COM-серверы IIS STA 16+ зависают на ОС Windows Server, а не на Windows 10 - PullRequest
0 голосов
/ 30 января 2019

У меня очень странная проблема со старым унаследованным приложением, которое использует ASP.NET HTTP Handler и пользовательский пул потоков для создания и вызова STA COM-объектов.Серверы вне процесса EXE STA-серверы (FoxPro COM-серверы).

Это прикладная среда, которая запускает пул COM-объектов на выделенных (т. Е. Закрепленных) потоках и направляет входящие запросы в эти потоки, которые вызывают операционный код на компонентах STA COM.

Этоэто старый компонент, и он стабилен более 15 лет.Однако в последнее время поступают жалобы от клиентов, использующих большее количество экземпляров - в частности, 16 или более, - что при перезапуске или перезапуске IIS (IISRESET) COM-серверы STA часто не могут загружаться с:

COMобъект, который был отделен от лежащего в его основе RCW, не может быть использован.

Интересно то, что я не использую оболочку Runtime Callable, но непосредственно использую Reflection для доступа к COM-объектам.Не используется ни динамический, ни тип обертки.

При запуске менее 16 экземпляров никогда не возникает проблема с утилизацией / перезапуском. Запуск 16 или более проблем начинает возникать непоследовательно, когда IIS перезапускается или перезапускается (IISRESET).

Я могу надежно воспроизвести эту проблему на нескольких установках Server 2016.15 экземпляров не проблема, 16 или более повторных циклов в скором времени повесят пул.Я не смог продублировать проблему на локальной машине с Windows 10 даже с гораздо большим количеством потоков пула.

Если я возьму повторную очистку IIS из уравнения, я могу запустить 50 потоков / COM-серверов и выгрузить перезагрузить серверы в пуле под управлением приложения, и это отлично работает (не то, что когда-либо было бы полезно).

Однако рециркуляция IIS (которая запускает точно такой же путь выполнения) не делает.Единственное различие, о котором я могу подумать, заключается в том, что IIS выполняет ступенчатую остановку и запуск операции, когда один экземпляр Applicaiton Pool отключается, а другой запускается, поэтому на самом деле вдвое больше активных экземпляров , происходящих во времяутилизируется.

Мне кажется, что проблема связана с некоторым внутренним ограничением количества STA COM-серверов, которые могут быть созданы либо в рамках одного и того же процесса, либо, возможно, даже глобально в Windows (поскольку это происходит во время удвоения количества экземпляров).во время перезапуска процесса пула приложений начинается проблема), но я действительно нахожусь в темноте.

Кто-нибудь сталкивался с подобной ситуацией или знает о каких-либо ограничениях на ограничение создания объектов STA COM-объекта для процесса или наWindows Server?

...