32-разрядные устаревшие библиотеки DLL COM В Windows Azure


Я использую около 15-20 устаревших 32-разрядных библиотек DLL C++ COM В моем веб-приложении, некоторые из этих 32-разрядных библиотек DLL имеют зависимости от сторонних производителей, которые в дальнейшем являются COM или native DLL.

Я рассматриваю возможность перехода на Windows Azure, которая, как я понимаю, является 64-разрядной платформой. Может ли кто-нибудь посоветовать, будут ли работать мои 32-разрядные библиотеки DLL? (Я знаю, что теперь их можно восстановить).

С недельной или двухлетней работой я мог бы перекомпилировать свои библиотеки DLL до 64-битной версии, однако это невозможно для зависимостей 3-й стороны, как я у меня нет источника.

Я понимаю, что Windows Azure использует 64-разрядную версию, поэтому мне интересно, какой подход будет наилучшим для переноса моего приложения?

Т. е. должен ли я переместить 32-разрядные библиотеки DLL и полагаться на WoW64 – будет ли это вообще работать? Я не против небольшого хита в исполнении.

Или лучше перекомпилировать мои 64-битные приложения и каким-то образом использовать 32-битные DLL?

2 9

2 ответа:

Ответ-да. Windows Azure похожа на обычный Windows Server 2008 x64 и имеет 32-разрядную подсистему. Единственным ограничением здесь является то, что процесс размещения веб-роли и рабочей роли является 64-разрядным.

Имея это в виду, вы должны будете сделать своего рода взаимодействие между 64-разрядным хост-процессом и 32-разрядными библиотеками DLL. Конечно, INPROC COM-объекты не будут работать в этом случае. Трудно дать здесь более конкретный совет, не зная подробностей:

  1. Какой тип COM-интерфейсов (автоматизация совместима или нет)?
  2. Какой маршалинг они поддерживают (только inproc или out-of-proc)
  3. если маршалинг работает в разных процессах, есть ли у вас контроль над тем, как регистрировать объекты (inproc или out-of-proc).
  4. насколько легко создать управляемую оболочку для вашего объекта (например, пользовательскую сборку взаимодействия C++ / CLI, размещенную в 32-разрядном процессе и способную взаимодействовать с 64-разрядным хостом с помощью автоматизации WCF или COM)

Я не знаю, сработает ли это, но другой вариант, который следует рассмотреть, - это попытаться заставить ваш пул приложений работать как 32-разрядный процесс. Вам нужно будет работать в режиме IIS с полным доверием и выполнить эту задачу запуска роли:
пул приложений командной строки установить /пул приложений.название: /параметр enable32bitapponwin64:правда
Вам нужно будет определить имя пула приложений, в котором будет использоваться ваше приложение. И опять же, я не уверен, что это вообще сработает, но я думаю, что стоит попробовать, потому что если это сработает, это будет самый простой вариант для вас.

Эта лаборатория"расширенные веб-роли и рабочие роли" в учебном наборе Windows Azure охватывает использование устаревшей библиотеки dll COM в Azure.