2013-02-20 36 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