2011-03-26 67 views
9

我在我的web应用程序中使用了大约15-20个传统32位C++ COM DLL,其中一些32位DLL具有第三方依赖关系,这些第三方依赖关系是进一步DLL的COM或本机。Windows Azure上的32位传统COM DLL

我在考虑转移到Windows Azure,据我了解这是一个64位平台。任何人都可以建议我的32位DLL是否可以工作? (我知道它现在可以regsvr32他们)。

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

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

即应该移动32位DLL并依赖WoW64 - 这是否甚至可以工作?我不介意小小的表现。

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

回答

9

答案是肯定的。 Windows Azure就像一个正常的Windows Server 2008 x64,它有32位子系统。这里唯一的限制是Web角色和工作者角色托管过程是64位。

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

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

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

+1

非常感谢! enable32BitAppOnWin64工作到目前为止,应该比将32位转换为64位和编组这些第三方DLL更容易。 – 2011-03-27 11:12:21

+0

这可能听起来像是运行传统应用程序的方式,但明确地告诉自己,这不是Microsoft长期支持的内容。 WOW64成为Windows Server的可选部分(自2012年起),并且不再默认安装。纯64位现在是你应该尽早拥抱的路径。 – 2014-08-10 09:49:12

2

Windows Azure培训工具包中的此实验室"Advanced Web and Worker Roles"涵盖了在Azure中使用Legacy COM dll。

+3

已移至https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032483917&culture=en-US – 2013-06-11 20:30:39

相关问题