深入解析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平台上 同部署加密版本一样部署未加密的版本。
希望这篇文章能帮助你诊断与调试,我们正在考虑为此开发一些便捷的工具。