Изменение некоторых «вещей» COM из внешнего места - PullRequest
0 голосов
/ 01 декабря 2009

Это сложный вопрос. У нас есть приложение ASP.NET, сервер IIS7 (работает классический конвейер, если он уместен) и одна жирная библиотека COM-объектов.
Приложение использует эту библиотеку следующим образом: вызов функции, получение результата, его отображение.
Проблема в том, что в библиотеке COM нет функции для изменения языковых предпочтений - она ​​инициализирует ее из файла «web.config», и тогда нет очевидного способа изменить его. Проблема в том, как это сделать нетривиальным способом. Я могу сделать что-нибудь с приложением ASP.NET и некоторыми вещами на самом сервере.
В принципе, я думаю, мне нужно как-то вызвать SetThreadCultureUI () для потока пула приложений. Кроме того, есть шанс, что я смогу создать несколько доменов приложений для каждого языка и загрузить в них COM, но это будет слишком много кода.

Су .. Есть идеи, как сделать это самым быстрым и простым способом? (несколько пулов приложений с копиями одного приложения - уже используемое решение, но плохое)

1 Ответ

0 голосов
/ 20 декабря 2009

Вам нужно будет провести некоторое тестирование. Если приложение COM действительно читает языковые настройки из web.config (и, честно говоря, было бы довольно необычно, если бы оно это делало), тогда вы мало что можете сделать. Переписать web.config действительно сложно, не в последнюю очередь потому, что вы перезапускаете пул приложений при сохранении файла!

Если, однако, он проверяет операционную систему на наличие культуры для заданного потока, вы можете использовать BackgroundWorker в своем коде для создания нового потока. Там вы можете установить культуру и вызвать свой COM-объект (с соответствующими lock s для обеспечения безопасности потока) без лишних дополнительных затрат.

В качестве альтернативы, да, несколько пулов приложений - тяжелый, но тривиальный ответ на проблему. Я думаю, что это единственное решение, если библиотека COM читает web.config.

...