深入解析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平台上同部署加密版本一样部署未加密的版本。

 

希望这篇文章能帮助你诊断与调试,我们正在考虑为此开发一些便捷的工具。

 

  

本文翻译自:https://blogs.msdn.com/jnak/archive/2009/04/16/digging-in-to-the-windows-azure-service-package.aspx