Azure Lei Zhang的博客

weibo: LeiZhang的微博/QQ: 185165016/QQ群:319036205/邮箱:leizhang1984@outlook.com/TeL:139-161-22926

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  390 随笔 :: 0 文章 :: 394 评论 :: 0 引用

Windows Azure Platform 系列文章目录

 

  如果我们想把一个应用程序迁移到Winodows Azure平台上,还会遇到这样的问题:传统的Web Site往往使用了许多"老"的COM组件。这样是不是意味着我必须在每个Azure计算节点(Azure VM)上都手工注册一遍COM组件(比如远程桌面连接,然后regsvr32?,这样也太麻烦了吧...)其实Windows Azure提供了role start up功能,方便我们在云平台注册COM组件。

  1.使用VS2010新建一个Windows Azure项目,并且添加一个Web Application(过程略)

  2.假设我们有一个C++项目,能够生成名为LegacyCOM.dll,这个dll有一个方法叫做Greeting()。

  具体调用是这样的:先实例化这个dll对象,然后调用Greeting方法,传入一串string进去,然后这个dll会返回一串string。

  Azure Project会根据Web服务器的操作系统的版本来注册不同版本的LegacyCOM.dll,比如探测到服务器端64位的Win7操作系统,则会自动注册64位的LegacyCOM.dll。

  3.我们在WebRole Solution里新建两个文件夹,分别叫"amd64"和"x86"。

  4.将64位版本的LegacyCOM.dll复制"amd64"文件夹下,将32位版本的dll复制到"x86"文件夹下。

  5.将这两个dll包含在VS项目里(include in project),并且将属性中的"Copy to Output Directory"设置成"Copy always"。

  6.在Web Application工程下新建文件,文件夹设置成Register.cmd

  7.Register.cmd的内容如下,主要的功能是在Azure VM上注册这个dll组件

echo off
regsvr32.exe /s "%~dp0%PROCESSOR_ARCHITECTURE%\LegacyCOM.dll"

  如果发现服务器OS是64位的,Register.cmd会注册amd64文件夹下的dll,否则注册x86下的dll

 

  8.将Register.cmd的属性中的"Copy to Output Directory"设置成"Copy always"。

  9.修改ServiceDefinition.csdef,在ServiceDefinition节点里添加Startup任务

其中,commandLine指向我们写好的cmd文件。需要注意的是,这个脚本必须是以ANSI格式编码的。

executionContext:脚本的执行上下文,也就是这个脚本的执行权限。可以选项包括:

  • limited:默认值。表示使用和当前Role所在进程相同的权限来执行这个脚本。
  • elevated:表示使用本机管理员权限来执行这个脚本。当脚本进行了系统级别的操作,比如对IIS进行配置,就必须指定为elevated。

TaskType的可选值有三种,含义如下:

  • Simple:默认值,只有当Task执行完成之后系统才会执行下一个Task。当所有Task执行完成之后才会开始启动Role。
  • Background: startup任务在后台运行,系统不会等待Task执行完成就开始启动Role
  • Foreground: 和Background方式类似,系统不会等待Task执行完成就开始启动Role。不同之处在于,只有当所有Task都执行完成之后Role才可能被重启。

10.在Default.aspx添加TextBox,Button和Label,并且在Button_Click添加如下代码:

LegacyCOMLib.Helper helper = new LegacyCOMLib.Helper();
Message.Text = helper.Greeting(Username.Text);

11.按F5运行VS工程,在pre-build过程中,Azure Project会先侦察CSDEF是否有Startup节点,如果有的话则执行CommandLine指向的cmd文件。我们这里的cmd文件的功能是:根据操作系统的版本,自动注册所对应的dll。并且会弹出窗口,表明注册成功。我们按"OK",让项目继续执行。

12.在aspx页面里,用户在textbox输入name的值,然后按"Greet me!",dll会调用自动返回一串字符串并且显示在页面上。

  

通过Startup功能,用户还可以通过系统命令修改系统配置,或者通过PowerShell执行更加复杂的操作(比如使用InstallUtil注册Windows Service)。另外和通过远程桌面手动修改系统配置不同,Startup功能会在系统迁移、故障恢复的时候自动执行,因此可以作为持久化的操作。

 

posted on 2012-03-13 21:10 Lei Zhang的博客 阅读(...) 评论(...) 编辑 收藏