2016-11-01 1 views
0

У меня есть функция Azure с триггером HTTP. Я бы хотел вызвать двоичный файл через node.js и/или C# и передать его стандартный вывод в ответ, а также установить код состояния HTTP в этом процессе.Azure Functions вызывает двоичный исполняемый файл, поток стандартного вывода для ответа (например, child_process.spawn для node.js)

Я не смог сделать это с помощью обычных методов, используемых обертками для AWS Lambda (например, child_process.spawn для node.js), хотя я, возможно, пропустил что-то простое. Это тривиально делать с помощью пакетных функций, за исключением установки кода состояния, и я не проверял, действительно ли поток действительно передается. Существуют ли какие-либо примеры для этого через node.js и/или C#?

ответ

1

Аарон,

Это должно работать, как это делает вне среды Azure функции.

Есть много примеров того, как выполнить процесс и прочитать его вывод в C#/Node, поэтому я не буду тратить на него много времени, но вот пример быстрой функции, который запускает dir и печатает справочники:

using System; 
using System.Diagnostics; 

public static void Run(string input, TraceWriter log) 
{ 
    log.Info("Executing"); 
    using (var process = new Process()) 
    { 
     process.StartInfo.FileName = @"D:\Program Files (x86)\Git\usr\bin\dir.exe"; 
     process.StartInfo.Arguments = @"D:\home"; 
     process.StartInfo.UseShellExecute = false; 
     process.StartInfo.RedirectStandardOutput = true; 
     process.Start(); 
     string output = process.StandardOutput.ReadToEnd(); 
     process.WaitForExit(); 

     log.Info(output); 
    } 
} 

О потоковом выход, хотя возможно, это не рекомендуется из Azure функций (по крайней мере на данный момент).

Надеюсь, это поможет!

+0

Спасибо, Фабио, я попытался сделать что-то подобное асинхронно с .NET (я могу добавить фрагмент позже). В этом примере похоже, что вывод будет содержать весь результат выполнения. Хотя я не знаю, будет ли функция Azure «потоковым» результатом, я попытался сделать что-то вроде примера child_process.spawn, показанного на этой ссылке, через node.js: https://blog.liftsecurity.io/2014/08/19 /Avoid-Command-Injection-Node.js - он просто не отправляется по проводу. – Aaron

+0

Обновлен с комментарием о потоковой передаче. –