接下来我们介绍开发过程和核心代码。
步骤一:创建项目
打开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();
}
{
UpdateProcessInfo();
}
更新进程信息方法:
protected void UpdateProcessInfo()
{
……
if (GetProcessTimes(Process.GetCurrentProcess().Handle,
out createdTime,
out exitedTime,
out kernelTime,
out userTime))
……
}
{
……
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;
}
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
echo Hello World!
exit /B 0