zoukankan      html  css  js  c++  java
  • Windows Azure Cloud Service (24) 使用Startup注册COM组件(上)

    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功能会在系统迁移、故障恢复的时候自动执行,因此可以作为持久化的操作。

  • 相关阅读:
    webapi 获取json数据
    js的匿名函数与自定义函数
    深入理解计算机系统 第八章 异常控制流(2)
    深入理解计算机系统 第八章 异常控制流(1)
    深入理解计算机系统 第三章 程序的机器级表示(2)
    深入理解计算机系统 第三章 程序的机器级表示(1)
    深入理解计算机系统 第二章 信息的表示和处理(2)
    深入理解计算机系统 第二章 信息的表示和处理(1)
    深入理解计算机系统第一章,计算机系统漫游
    Leetcode练习(Python):第292题:Nim 游戏:你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1
  • 原文地址:https://www.cnblogs.com/threestone/p/2394484.html
Copyright © 2011-2022 走看看