Windows Azure上的32位旧版COM DLL

Mis*_*ook 9 azure 32bit-64bit

我在我的Web应用程序中使用大约15-20个传统的32位C++ COM DLL,其中一些32位DLL具有第三方依赖项,这些依赖项是DLL的COM或本机.

我正在考虑迁移到Windows Azure,我理解这是一个64位平台.任何人都可以建议我的32位DLL是否可行?(我知道现在可以对它们进行regsvr32).

经过一两个星期的工作,我可以将我的DLL重新编译为64位,但是由于我没有源代码,这对于第三方依赖项是不可能的.

我知道Windows Azure使用64位,所以我想知道这里迁移我的应用程序的最佳方法是什么?

即我应该移动32位DLL并依赖WoW64 - 这甚至可以工作吗?我不介意一个小的性能打击.

或者更好的是重新编译我的64位应用程序并以某种方式使用32位DLL?

sev*_*tov 9

答案是肯定的.Windows Azure就像普通的Windows Server 2008 x64一样,它有32位子系统.这里唯一的限制是Web角色和辅助角色托管过程是64位.

考虑到这一点,您将不得不在64位主机进程和32位DLL之间进行某种互操作.当然,在这种情况下,inproc COM对象将不起作用.在不知道细节的情况下,很难给出更具体的建议:

  1. 什么类型的COM接口(自动化兼容与否)?
  2. 他们支持什么样的编组(仅在过程中或在过程中)
  3. 如果编组跨进程工作,您是否可以控制如何注册对象(inproc或out-of-proc).
  4. 为对象创建托管包装器有多容易(比如由32位进程托管并能够使用WCF或COM自动化与64位主机通信的自定义C++/CLI互操作程序集)

我不知道它是否可行,但另一个需要考虑的选择是试图强迫你的应用程序池以32位进程运行.您需要以完全信任的方式在IIS模式下运行并将其作为角色启动任务运行:
appcmd apppool set /apppool.name:/ enable32BitAppOnWin64:true
您必须确定将使用您的应用程序的应用程序池的名称.而且,我不确定它会起作用,但我想这值得一试,因为如果它有效,它将是最简单的选择.