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)でノードを手動で実行した場合にも、同じエラーが発生します。PCでAzureDevelopmentFabricを実行している場合も同じです。

ヘルプや提案を事前に感謝します!

4

2 に答える 2

2

IISNodeで実行しているとおっしゃっていたので、それはWebロールである必要があります。SDKのreadmeから次の点に注意してください。

Service Runtimeを使用すると、現在のロールが実行されているマシン環境と対話できます。これらのコマンドは、コードが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 { クラス プログラム { static 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 に答える