2013-02-20 35 views
4

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

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

回答

3

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

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

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

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

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

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

在我的情况下,我将DLL放在名为library的文件夹中,但是您可以将它们放在任何你喜欢的地方,只要它们在.cmd文件中正确引用。另请确保在Visual Studio中的启动命令中引用的DLL设置下列文件属性:

生成操作:内容

复制到输出目录:始终

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

我希望这会帮助其他人面临类似的问题,将AspPDF等com类组件迁移到Azure。

+0

我在这种问题上停留了一段时间...在我的情况下,我需要在服务器中安装vsredist_x64.exe。如何验证启动操作是否正确执行?我不确定是否所有的文件都在正确的位置。我把所有的依赖项文件放在asp.net项目的bin文件夹中,并将它们全部“复制”。这是对的吗? – newman 2014-05-01 03:15:44

+0

啊,我也把批处理(cmd)文件放在asp.net项目的bin文件夹中。我想知道云服务项目中的启动任务命令如何找到这个文件(在另一个项目中)? – newman 2014-05-01 03:36:04

+0

@QFDev这是否在Paas工作?谢谢 – Juanjo 2017-11-24 15:47:57