`
ldb19890624
  • 浏览: 243660 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

利用Node.JS访问Azure用户角色信息

 
阅读更多

回报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);

在模拟器上运行上面的例子,显示的结果如下:





分享到:
评论

相关推荐

    Serverless 中的 Node.js 实践.zip

    在这个实践中,我们将深入探讨如何利用Node.js在Serverless环境中构建高效且成本优化的应用。 一、Serverless架构基础 1. 无服务器:Serverless并不意味着真的没有服务器,而是指开发者无需关注服务器的管理和运维...

    微软Azure Stack交付和运营模式介绍.pdf

    4. DevOps团队(Node.js / .NET等开发者):利用Azure Stack构建、部署和管理应用程序。 **工作流和能力** Azure Stack支持Connected和Disconnected两种模式,可以根据网络连接状态灵活切换。其核心工作负载包括...

    Windows Azure Compute(讲稿)

    该平台不仅支持微软自家的技术栈,如.NET Framework、ASP.NET和Windows Server,同时也兼容其他流行的技术如Java、Node.js、Python等,这使得Windows Azure成为一个非常开放且适应性强的平台。 #### 二、Windows ...

    Azure Stack交付与运维介绍.pptx

    App Service是Azure Stack中的一个重要组件,它提供了构建、部署和管理Web应用程序的能力,支持多种开发框架,如Node.js和.NET。通过DevOps工具链,开发人员可以无缝地在Azure Stack上进行开发、测试和部署应用。 *...

    globalazurebootcampreport:我在 Globa Azure Bootcamp 上的演示的示例应用程序

    在这个演示中,我们使用 JavaScript 和 Node.js 构建了一个与 Azure 无缝集成的后端服务。 **Azure 服务的利用** 1. **Azure Functions**:我们的应用程序可能使用了 Azure Functions,这是一种事件驱动的计算服务...

    会议请假系统

    Node.js是一个开源、跨平台的JavaScript运行环境,用于在服务器端执行JavaScript代码。在这个请假系统中,Node.js作为后端开发的基础,提供了非阻塞I/O和事件驱动的模型,适合处理大量并发请求,确保系统的高可用性...

    yii mongodb 小说系统.zip

    - 用户认证和授权:Yii通常会集成其内置的RBAC(角色基础访问控制)系统,用于管理用户权限。 5. **开发流程**: - 模型设计:根据小说系统的需求,定义数据模型,如小说模型、用户模型等,并在Yii和MongoDB中...

    userStory:使用 NodeJS、Angular 和 Mongo DB 的用户故事应用程序

    通过以上步骤,我们可以构建一个完整的用户故事应用程序,利用Node.js、Angular和MongoDB的强大功能,为用户提供高效、响应式的体验,同时保持数据的安全性和一致性。在实际开发过程中,还需要考虑性能优化、错误...

    AzureCodeCamp:一个用于卡尔加里.net用户组的Azure代码阵营的演示应用程序的存储库

    可能的应用场景包括使用Node.js作为后端开发语言,或者在客户端使用JavaScript进行交互逻辑处理和API调用。 ### 文件结构分析 压缩包中的`AzureCodeCamp-master`很可能包含了项目的源代码、配置文件、README文档等...

    节点无服务器代理

    Node.js代理可能扮演了类似的角色,接收客户端请求,然后根据配置将请求转发到正确的目标服务。 5. **事件驱动编程**:Node.js的事件循环模型使得它可以高效地处理大量并发连接。在这个代理应用中,可能利用了事件...

    [其他类别]开放式实验室预约系统 v1.0_openlab.zip

    - 用户权限管理:根据用户角色(学生、教师、管理员等)设定不同的操作权限。 - 事件驱动:预约、取消、审批等操作触发系统事件,更新数据库和用户界面。 - 分布式架构:考虑并发访问和高可用性,系统可能采用...

    chatroom.rar

    为了保护用户隐私和数据安全,源码中应包含身份验证和授权机制,如JWT(JSON Web Tokens)进行用户验证,以及角色基础的权限控制(RBAC)来限制不同用户对系统的访问权限。 6. **性能优化** 高并发的聊天室应用...

    IT Tools工具箱:开发人员在线工具集合系统源码完整版

    5. **身份验证与授权**:为了保护用户数据和系统安全,系统可能会实现OAuth2、JWT(JSON Web Tokens)或Session-based的认证机制,以及基于角色的访问控制(RBAC)。 6. **API接口设计**:为了提供工具服务,系统...

    新闻发布系统的原码.......

    新闻发布的系统是一个用于在线发布、管理和分发新闻信息的应用程序,它在互联网上扮演着信息传播的重要角色。这个系统通常包含一系列功能,如新闻编辑、审核、发布、分类、搜索和用户互动等。下面,我们将深入探讨...

    毕业设计-停车位管理系统.zip

    2. 认证与授权:实现用户身份验证,区分不同角色的权限,防止未授权访问。 3. 安全传输:使用HTTPS协议,确保数据在传输过程中的安全性。 4. 防攻击机制:设置防火墙,防止DDoS攻击,定期进行安全审计,确保系统的...

    员工信息管理系统

    前端界面则多使用Web技术,如HTML、CSS和JavaScript,配合后端框架如Spring Boot、Django或Node.js来构建。为了保证数据安全,系统会采用加密算法,如SSL/TLS协议,以确保数据在传输过程中的安全性。 此外,随着...

    学生信息管理系统(源码)

    权限管理确保不同角色用户只能访问其权限范围内的信息。 6. 部署与运维:系统部署通常采用云服务器,如阿里云、AWS或Azure,利用Docker容器化技术进行快速部署和扩展。 在实际应用中,学生信息管理系统还可以与...

    行业文档-设计装置-基于手机平台的无线网络办公系统.zip

    3. 权限控制:根据用户角色分配不同权限,防止未授权访问敏感信息。 4. 数据备份与恢复:定期进行数据备份,确保在意外情况下的数据恢复能力。 四、性能优化 1. 响应式设计:适应不同屏幕尺寸和分辨率,提供良好...

    行业-电子-面向电子商务的企业商品营销管理系统的设计与实现的说明分析.rar

    利用AWS、Azure或阿里云等云服务,可以实现弹性伸缩、自动备份和灾难恢复,确保系统的高可用性和稳定性。 10. **移动适配**: 随着移动设备的普及,系统需要支持多平台访问,采用响应式设计或独立的移动端应用...

    ProprietorMIS.zip

    4. **权限控制**:系统需要实现不同角色的权限控制,例如,业主可以查看自己的信息和提交维修请求,而管理员则能访问所有数据并进行操作。这涉及到身份验证和授权机制,如OAuth或JWT。 5. **后端开发**:...

Global site tag (gtag.js) - Google Analytics