深入解析Windows Azure 服務程序包
什么是Windows Azure 服務程序包?它包含了云服務的服務定義,還有對于每一個角色的內容信息與二進制文件。它有兩種形式。第一種,它是一個以csx為拓展名的目錄結構。當你參看云服務項目的輸出目錄時,你會看到下圖:
高亮顯示的CloudService6.csx 文件便是服務程序包的目錄結構版本,服務定義文件便被放在此處。而服務配置文件是與服務程序包分開保存的,以便能夠獨立的對其更新。 如:更新設定值,增刪每一個角色的實例。在Development Fabric上運行的便是云服務項目輸出的服務程序包的目錄結構版本。
如果你查看 WebRole 和WorkerRole 目錄,你會看到用來運行你的角色的內容信息與二進制文件。服務程序包的另一種形式是單文件版本(文件拓展名為cspkg),當你在云服務項目上右擊,并選擇“Publish…”來發布云服務時,它便會被創建。
這個是你需要上傳至 Windows Azure 云平臺來運行你的服務的文件(與服務配置文件一起)。
在云服務項目的輸出目錄下的發布文件夾內,你會發現單文件壓縮包與服務配置文件。當你發布云服務時,VS會自動打開此目錄。理解服務程序包的2種形式 非常有意義,這能讓你知道去哪里查看哪些文件被本地或云上的Fabric打包并執行 。單文件的服務程序包會被壓縮(zipped)與加密,所以你無法瀏覽,除非你在環境變量中設置成 不加密的打包方式。
注意:不加密的打包方式只用于診斷調試目的,不能用于產品發布。另外,此方法只出于內部使用的意圖,并無任何服務支持,且可能被隨時更改。
在Visual Studio 已關閉的情況下,創建一個新的環境變量:_CSPACK_FORCE_NOENCRYPT_ ,將其值設為true。如下圖:
你可以通過 控制面板->系統和安全->系統->左側的高級系統設置->系統屬性對話框中的高級選項卡->環境變量 來更改環境變量。現在打開Visual Studio,打開一個云服務項目,右擊發布(“Publish…”),你會在輸出窗口看見如下信息:
C:\Program Files\MSBuild\Microsoft\Cloud Service\v1.0\Microsoft.CloudService.targets(0,0): warning : CloudServices44 : Forcing creation of unencrypted package.
現在你可以解壓單文件服務程序包了,重命名為*.zip,然后解壓(unzip)。在第一個目錄內,你可以解壓WebRole_*.cssx 和 WorkerRole_*.cssx文件,生成你的worker與web的角色目錄。
值得一提的是,盡管我重申過應該只部署服務程序包的加密版本,但是你也可以在Windows Azure平臺上 同部署加密版本一樣部署未加密的版本。
希望這篇文章能幫助你診斷與調試,我們正在考慮為此開發一些便捷的工具。