3

我正在 Azure 中运行 Node.js 应用程序,并尝试获取如下配置设置:

var azure = require('azure');

azure.RoleEnvironment.getConfigurationSettings(function(error, settings) {
   if (error) {
      console.log(error);
      return;
   }

   console.log('Settings: %s', settings);
});

但输出总是这样:

{ "code": "ENOENT", "errno": "ENOENT", "syscall": "connect", "fileName": "\\\\.\\pipe\\WindowsAzureRuntime" }

我正在使用 IISNode 使用所有最新位在 IIS 中运行 Node.Js。如果我在 Azure VM(即 node.exe server.js)上手动运行 node,我也会遇到同样的错误。在 Azure Development Fabric 中的 PC 上运行时也是如此。

提前感谢您的任何帮助或建议!

4

2 回答 2

2

由于您提到您在 IISNode 中运行,因此它必须是 Web 角色。请注意SDK 自述文件中的以下内容:

服务运行时允许您与当前角色正在运行的机器环境进行交互。请注意,仅当您的代码在 Azure 模拟器或云中以辅助角色运行时,这些命令才有效。

于 2012-09-27T03:42:02.563 回答
0

这是我的解决方案。这不好,但至少它现在有效。

  1. 像这样创建一个 .NET 控制台应用程序

    使用 Microsoft.WindowsAzure;使用系统;使用 System.Collections.Generic;使用 System.Linq;使用 System.Text;使用 System.Threading;使用 System.Threading.Tasks;

    命名空间 CloudConfigurationHelper { 类程序 { 静态 int MaxRetryTime = 10;

        public static Dictionary<string, string> GetSettings(string[] keys)
        {
            Dictionary<string, string> settings = new Dictionary<string, string>();
    
            try
            {
                foreach (string key in keys)
                {
                    settings[key] = CloudConfigurationManager.GetSetting(key);
                }
            }
            catch
            {
                MaxRetryTime--;
    
                if (MaxRetryTime <= 0)
                {
                    return settings;
                }
    
                Thread.Sleep(2000);
                return GetSettings(keys);
            }
    
            return settings;
        }
    
        static int Main(string[] args)
        {
            var settings = GetSettings(args);
            if (settings.Count != args.Length)
            {
                return -1;
            }
    
            foreach (string key in settings.Keys)
            {
                Console.WriteLine(key + "=" + settings[key]);
            }
    
            return 0;
        }
    }
    

    }

  2. 放置启动任务以读取 azure 配置变量并写入 .env 文件。使用https://github.com/motdotla/dotenv读取 .env 文件并加载到 process.env。

env.cmd 文件:

@echo off
cd %~dp0
CloudConfigurationHelper.exe %*

在 ServiceDefinition.csdef 中添加启动任务:

<Task commandLine="Env.cmd YOUR_SETTING_KEY &gt; ..\.env executionContext="elevated" />
  1. 在 NodeJS web 角色中,我们只需要通过process.env["YOUR_SETTING_KEY"]
于 2015-05-13T10:54:00.093 回答