回报CSDN!
我们在微软的WindowsAzure云计算平台上进行软件开发时,很有可能会遇到这个需求,那就是获取用户的角色环境信息。比如要获取当前的实例名称、部署ID(DeploymentID)、甚至是要知道哪些角色在运行?哪些角色没有运行?如果我们要使用NodeJS来实现这些任务,那就需要一些技巧。因为角色环境类(RoleEnvironment)是托管的.NET代码。
在本文中,我们会讨论怎样设置正在运行的Azure角色信息,以便让这些信息能够很容易地被NodeJS服务器所访问。诀窍是使用环境变量和使用启动任务,用运行的PowerShell作为两者间的桥梁。
下面我创建了一个例子来说明这一点,大家可以自行测试。基本上,它获得了启动任务,它把Azure角色环境信息转存到环境变量,并用server.js脚本文件输出这些变量。无论如何,大家可以从下面的代码看它到底是怎么工作的。
我们需要完成下列任务:
1、创建一个启动任务,该任务运行一个cmd脚本,脚本可访问Azure角色环境信息;
2、设置环境变量的信息,以便于可以从NodeJS访问这些信息;
3、通过process.env对象,用server.js获取值。
下面进行详细说明。cmd脚本是这样的:
脚本一:setupenvironmentvariables.cmd
@ECHO off
%~d0
CD "%~dp0"
IF EXIST %WINDIR%\SysWow64 (
set powerShellDir=%WINDIR%\SysWow64\windowspowershell\v1.0
) ELSE (
set powerShellDir=%WINDIR%\system32\windowspowershell\v1.0
)
ECHO Setting the Environment variables..
CALL %powerShellDir%\powershell.exe -Command Set-ExecutionPolicy unrestricted
CALL %powerShellDir%\powershell.exe -Command "& .\set_azure_role_information.ps1"
ECHO Done!
ECHO Restarting IIS..
CALL iisreset
ECHO Done!
ECHO Starting the W3SVC service..
CALL NET START W3SVC
ECHO Done!
上面的代码解释如下:
1、要在Azure云上执行未签名的PowerShell脚本,你必须把执行策略(ExecutionPolicy)设置为无限制(Unrestricted)。我使用了Set-ExecutionPolicy命令,但要注意它的值不会改变,除非你手动修改值。在PowerShell2.0环境下,还可以使用-ExecutionPolicy命令来设置在当前范围下无限制。但是由于默认的WebRole模板使用了osFamily="1"设置,它在WindowsServer2008SP2有效,所以我们不会使用此命令。
2、重点:在环境变量设置后,我们需要重启IIS服务器,重启W3SVC,让服务生效。Azure云平台的W3SVC设置为手工模式,因此这就是为什么它不会在IIS服务器复位后自动启动。
我们来看下一个PowerShell脚本:
脚本二:setazurerole_information.ps1
[Reflection.Assembly]::LoadWithPartialName("Microsoft.WindowsAzure.ServiceRuntime")
[Environment]::SetEnvironmentVariable("RoleName", [Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment]::CurrentRoleInstance.Role.Name,"Machine")
[Environment]::SetEnvironmentVariable("RoleInstanceID", [Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment]::CurrentRoleInstance.Id,"Machine")
[Environment]::SetEnvironmentVariable("RoleDeploymentID", [Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment]::DeploymentId,"Machine")
[Environment]::SetEnvironmentVariable("IsAvailable", [Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment]::IsAvailable,"Machine")
[Environment]::SetEnvironmentVariable("CustomVariable", "Some value","Machine")
代码说明:我们通过RoleEnvironment属性值设置一些环境变量。要注意,还可以设置自定义的环境变量。
脚本三:ServiceDefinition.csdef
<Task commandLine="setup_environment_variables.cmd"
executionContext="elevated" taskType="simple" />
最后,我们用NodeJS编写server.js代码,它可以输出响应的结果。
脚本四:server.js
var http = require('http');
var port = process.env.port || 1337;
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write("Role Name: " + process.env.RoleName + "\n");
res.write("Role InstanceID: " + process.env.RoleInstanceID + "\n");
res.write("Role DeploymentID: " + process.env.RoleDeploymentID + "\n");
res.write("Is running?: " + process.env.IsAvailable + "\n");
res.write("Custom variable: " + process.env.CustomVariable + "\n");
res.end();
}).listen(port);
在模拟器上运行上面的例子,显示的结果如下:
分享到:
相关推荐
azure-sdk-for-node, 用于 node.js 文档的Azure SDK 用于 Node.js的 SDK 这个项目提供了一个 node.js 包,它可以方便地使用和管理Microsoft服务。 它支持以下 sdk:旧的ASM服务( 带有 azure-asm-* 命名约定的包)新ARM...
page_type 语言产品展示描述urlFragment 样品javascript 节点js 天蓝色的钥匙库天蓝色如何使用Node.js从Azure Key Vault设置和获取机密。 获取设置密钥库秘密管理的id-nodejs如何使用Node.js从Azure Key Vault设置和...
适用于Node.js的Azure DevOps客户端与Node.js应用程序中的Azure DevOps集成。安装库npm install azure-devops-node-api --save消息vso-node-api已重命名并发布为azure-devops-node-api开始吧样品请参阅以获取完整的...
Building Bots with Node.js by Eduardo Freitas and Madan...- Leverage ICR and Azure Table Storage from Node.js to create a bug tracking bot - Integrate Force.com API and Kik to create a Salesforce CRM bot
azure-functions-pack, 轻松为Azure函数打包你的node.js 函数 Azure函数包这是一个工具,使它容易地包装你的Azure函数 node.js 函数,以便在Azure函数。问题解决的问题每当 on ( a 被称为"函数App冷启动") 每个函数...
Leverage ICR and Azure Table Storage from Node.js to create a bug tracking bot Integrate Force.com API and Kik to create a Salesforce CRM bot Table of Contents Chapter 1. The Rise of Bots – Getting ...
使用Node.js和Azure功能构建无服务器应用程序 由Packt发布的用于使用Node.js和Azure函数构建无服务器应用程序的代码存储库
page_type 语言产品描述urlFragment 样本javascript 节点js 天蓝色的钥匙库Azure应用服务如何使用Azure托管身份和Node.js从Azure密钥保险库设置和获取机密。 获取设置密钥库秘密管理的id-nodejs如何使用Azure托管...
适用于框架(node.js)的Azure数据库(, 等)模块 讲解 了解如何开始使用 安装前 用于表存储 创建一个存储帐户和资源() 对于,在,转到“仪表板”>“存储”>“您的存储帐户” 。 记下在“设置”选项卡下的...
宣布针对JavaScript的新Azure SDK 我们很高兴地宣布,我们正在位于以下地址的新GitHub存储库中构建新的 : : 。 这些软件包附带TypeScript类型定义,并且同时具有Node.js和浏览器支持。 以下是有关此仓库中弃用...
javascript 天蓝色azure-iot-hub适用于 Node.js 的 Azure IoT 示例azure-iot-samples-node 提供了一组易于理解、经过持续测试的示例,用于通过 Azure/azure-iot-sdk-node 连接到 Azure IoT 中心。先决条件开发机器...
通过 Node.js 试用 Azure Speech-To-Text 安装 安装的最新稳定版本(版本 0.10.x)。 $ git clone https://github.com/swells/text-to-speech.git $ cd text-to-speech $ npm install 配置 在运行示例之前,您...
此示例演示了调用 Node.js Web Api 的 JavaScript SPA 应用程序,该应用程序使用 Azure AD B2C 进行保护 演示如何使用 Passport.js 库通过 Azure AD B2C 保护 Node.js Web API 的示例 概述 此示例演示使用库通过...
node projects Intellisense Debugging local & remote with support for Linux and MacOS Profiling node REPL with multi line editing Integrated npm GUI Azure Web Sites Azure Cloud Service Git ...
使用Azure学习Node.js 这是Packt发布的用于使用Azure学习Node.js的代码存储库。 在Azure上构建,部署和测试您的Node应用这本书是关于什么的? 通过Azure学习Node.js是一本实用的,基于项目的书,它为您提供了作为...
page_type 语言 产品 描述 urlFragment 样本 javascript 节点js 天蓝色活动目录 ... 对于该API,使用Node.js的Azure Function HTTP触发器是通过基本身份验证实现的。 内容 文件夹 描述 SingUpValidation/inde
Serverless Framework – 构建Web, 移动和IoT应用利用无服务器架构。基于AWS Lambda, Azure Functions, Google CloudFunctions等。
Microsoft.Press.Windows.Azure.Step.by.Step
基于微软官方的人脸识别node.js代码,主要是引用azure的在线api,通过调用接口返回数据,用于学习交流,了解微软的在线人脸检测
Prentice.Hall.SOA.with.NET.and.Windows.Azure.May.2010.rar