技术开发 频道

案例解读Windows Azure中两种角色开发

  接下来我们介绍开发过程和核心代码。

  步骤一:创建项目

  打开VS 2010 创建云计算项目FullTrust,在弹出如图1所示的界面中,分别选择Web Role和Worker Role,并进行重命名为FullTrust_WebRole和FullTrust_WorkerRole。在重命名的时候,有个小技巧,把角色类型选到云服务解决方案中后,直接右击就可以重命名,当然也可以在项目中进行重命名,所不同的时候,项目名称改了,但是在本地磁盘存储文件的文件夹名称并没有改变。

  创建完工程后,在FullTrust_WebRole项目中添加Default和ExecuteProcess页面,HelloWorld.cmd脚本;在复制HelloWorld.cmd脚本文件到FullTrust_WorkerRole。

  这样我们创建项目的工作告一段落。

  步骤二:编写Web Role功能

  在FullTrust_WebRole中,default页面点击按钮显示刷新时间,核心代码如下:

  按钮事件代码: 

protected void Button1_Click(object sender, EventArgs e)

  {

  UpdateProcessInfo();

  }

  更新进程信息方法: 

protected void UpdateProcessInfo()

  {

  ……

  
if (GetProcessTimes(Process.GetCurrentProcess().Handle,

  out createdTime,

  out exitedTime,

  out kernelTime,

  out userTime))

  ……

  }

  GetProcessTimes方法是一个系统函数,用于取得进程时间。

  在ExecuteProcess.aspx中,有关键的一句:

<pre><% Run("~/HelloWorld.cmd",""); %></pre>

  这句调用了ExecuteProcess.cs的Run函数,代码如下:

protected int Run(

  
string cmdPath,

  
string arguments)

  {

  var process
= new Process();

  var startInfo
= process.StartInfo;

  ……

  process.ErrorDataReceived
+=

  (sender, evt)
=>

  {

  Response.Write(
"");

  WriteLine(evt.Data);

  Response.Write(
"");

  };

  process.OutputDataReceived
+=

  (sender, evt)
=>

  {

  WriteLine(evt.Data);

  };

  WriteLine(
"Executing: " + Path.GetFileName(startInfo.FileName));

  WriteLine(
"============= Output =======================");

  process.Start();

  process.BeginErrorReadLine();

  process.BeginOutputReadLine();

  process.WaitForExit();

  WriteLine(
"============================================");

  var elapasedTime
= process.ExitTime - process.StartTime;

  WriteLine(
"Exit Code: {0}", process.ExitCode);

  WriteLine(
"Elapsed Time: {0}", elapasedTime);

  return process.ExitCode;

  }

  这个函数调用子进程并输出命名行脚本结果。HelloWorld.cmd的脚步内容如下:

@echo off

  echo Hello World!

  
exit /B 0
0
相关文章