Запуск REST / WCF в качестве STA вместо MTA для COM - PullRequest
2 голосов
/ 24 июня 2009

Можно ли настроить службу REST (WCF) для запуска как STA вместо MTA ?

Этот подход необходим для запуска устаревших COM-объектов. Чтобы настроить веб-службы ASMX для работы в качестве STA вместо MTA, существует обходной путь, который использует HTTPHandler для принудительной работы веб-службы в качестве STA.

В статье Джеффа Просиза http://msdn.microsoft.com/en-us/magazine/cc163544.aspx, подробно описывается обходной путь и способы его применения. Применение того же HTTPHandler к службе WCF на основе REST (с использованием Создать новую службу данных ADO.NET в Visual Studio) приводит к ошибке в момент вызова WebServiceHandlerFactory (ему передается HTTPContext, URL и т. д.).

Обработчик работает для веб-служб ASMX, и я могу добавить WebMethod, который возвращает модель потоков в виде STA. Однако даже после установки ASPCompatibility (как в web.config, так и на уровне класса) пользовательский HTTPHandler всегда выдает ошибку в одной и той же точке при попытке использовать службу REST. Я не настроил никаких конечных точек, так как я использую базовую службу REST с парой методов «оператор службы». Ошибка:

Невозможно привести объект типа 'System.Web.Compilation.BuildResultCustomString'. набрать 'System.Web.Compilation.BuildResultCompiledType'.

Ответы [ 2 ]

0 голосов
/ 08 апреля 2014

Я иду в противоположном направлении (пытаясь преобразовать мой STA COM в MTA), и я считаю, что это происходит автоматически, если вы создаете экземпляр COM в своем экземпляре службы, а ваш COM является надлежащим STA с соответствующей записью в реестре , У меня так получилось, и я создал как минимум 5 обёрток для этого COM.

Если вы создаете потоки вручную, вы можете использовать SetApartmentState .

0 голосов
/ 07 июля 2009

Чтение Интеграция с приложениями COM + и посмотрите, куда это вас приведет.

...