6

我最近开始了将 .NET 应用程序迁移到 Windows Azure 云服务的过程。我们的应用程序严重依赖于许多 COM 类组件,这些组件包括 AspPDF(用于 PDF 制作和操作)和 AspJPEG(用于调整图像大小)。在典型的非云 IIS 设置中,我只需在生产服务器上注册 DLL(使用 regsvr32),一切都会好起来的!

在 Azure 中,过程略有不同,我将回答我自己的问题以帮助那些面临类似挑战的人。此方法可用于作为部署过程的一部分需要在服务器上注册的任何 dll。

4

1 回答 1

5

为了在 Windows Azure 云服务上注册 AspPDF 和 AspJPEG 组件,必须将 DLL 注册过程合并到部署例程中。当 Azure 解压应用程序时,它必须触发一个命令来注册 DLL,这必须在所有 VM 上持久保存,以确保这些依赖项在云环境中始终如一地工作。

为此,我们可以指示要在目标服务器上执行的命令文件。此任务在 ServiceDefinition.csdef 文件中定义如下:

<Startup>
  <Task commandLine="RegisterPersits.cmd" executionContext="elevated" taskType="simple" />
</Startup>

提升的执行上下文确保必须在服务上线之前执行此过程。Azure Fabric 控制器将在 BIN 文件夹中查找 .cmd 文件。您可以在记事本中创建 .cmd,然后更改扩展名。这是 .cmd 文件的内容。

chcp 1252>NUL
regsvr32 /s .\library\asppdf64.dll
regsvr32 /s .\library\aspjpeg64.dll
exit /b 0

我们使用参数 /s 调用 regsvr32 工具,这样可以确保响应是无声的,即没有会混淆结构控制器的弹出窗口。这很重要,因为我浪费了大量时间想知道为什么部署过程挂在初始化阶段......添加 /s 参数解决了这个问题!

在我的例子中,我将 DLL 放置在一个名为 library 的文件夹中,但是您可以将它们放在任何您喜欢的位置,只要它们在 .cmd 文件中被正确引用。还要确保为 Visual Studio 中的启动命令中引用的任何 DLL 设置以下文件属性:

构建操作:内容

复制到输出目录:总是

注册 DLL 的这个额外过程为部署过程增加了几乎可以忽略不计的时间。AspPDF 特有的另一点是使用正确的 DLL 版本的重要性。Persits 发出 32 位和 64 位 dll,Azure VM 在 64 位环境中运行,因此在上述过程中注册 asppdf64.dll 很重要,注册 32 位 dll 会在您的应用程序中引发模糊错误。幸运的是,您不需要为 64 位版本的 AspPDF 购买单独的许可证。

我希望这将有助于其他面临类似问题的人将 com 类组件(如 AspPDF)迁移到 Azure。

于 2013-02-20T14:07:20.043 回答