32-разрядные устаревшие библиотеки DLL COM в Windows Azure - PullRequest
9 голосов
/ 26 марта 2011

Я использую в своем веб-приложении около 15-20 устаревших 32-битных DLL-библиотек C ++ COM, некоторые из этих 32-битных библиотек DLL имеют сторонние зависимости, которые являются дополнительными COM или собственными библиотеками DLL.Windows Azure, который я понимаю, является 64-битной платформой.Кто-нибудь может посоветовать, будут ли работать мои 32-битные DLL?(Я знаю, что теперь их можно regsvr32).

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

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

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

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

Ответы [ 2 ]

9 голосов
/ 26 марта 2011

Ответ - да.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 с полным доверием и запустить это как задачу запуска вашей роли:
appcmd apppool set /apppool.name: / enable32BitAppOnWin64: true
Вам нужно будет определить имя пула приложений, которое будет использовать ваше приложениеиспользоваться.И опять же, я не уверен, что это сработает вообще, но, думаю, стоит попробовать, потому что, если это сработает, это будет самый простой вариант для вас.

2 голосов
/ 28 марта 2011

В этой лабораторной работе "Расширенные веб-функции и рабочие роли" в учебном комплекте по Windows Azure рассматривается использование устаревшей библиотеки DLL в Azure.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...