2016-04-05 4 views
10

Использование опций связывания для функции Azure позволяет указать имя написанного Blob на основе параметров, полученных из триггера (например, сообщение о очереди, вызвавшее функцию); на иллюстрации это пример.Создание имен для выходных капель для функции Azure

Мой вопрос: что является лучшим способом обработки случая, когда имя blob неизвестно заранее, но на самом деле рассчитано как часть выполнения функции?

И связанный: что делать, если функция может или не может генерировать выходной кадр (или несколько выходных капель!), Исходя из результата его расчета?

Насколько я понимаю, механизм привязки Azure Function не очень помогает в этих случаях, и самый простой подход - это ссылка на сборку, которая делает лазурный blob, написанный «классическим способом». Но есть ли более идиоматический способ?

+0

Обновленный ответ с отсутствующей информацией [здесь] (http://stackoverflow.com/questions/39855409/how-do-i-use-binder-to-perform-dynamic-bindings-in-my-c-sharp -функции). –

ответ

15

Вы уже можете это сделать в C# Azure Functions, и у нас есть элемент отслеживания here in our repo, чтобы включить это для функций Node.js. Мы скоро доберемся до этого.

Ниже приведен пример рабочей функции, которая связывается с блобом с указанным путем во время выполнения. Так как под крышкой Azure Functions построена на Azure WebJobs SDK, вы заметите, что это зависит от использования WebJobs SDK Binder того, с чем вы, возможно, не знакомы. Дополнительную документацию можно найти в WebJobs SDK: IBinder/Binder. В SDK WebJobs для привязок используются декларативные атрибуты (например, QueueAttribute/TableAttribute/BlobAttribute и т. Д.). Вы можете указать все это во время выполнения через Binder. В Azure Functions мы используем внешние метаданные для описания привязок, но в этом расширенном сценарии у вас есть гибрид. Обратите внимание, что при использовании Binder не существует соответствующего связывания в function.json. Для более подробной информации о Binder динамические привязки см. this Вопрос и ответ.

В общем, вы обнаружите, что многие удивительные возможности WebJobs SDK могут использоваться в Azure функций - наш документ просто необходимо, чтобы догнать, чтобы люди знают об этом :)

Еще одна вещь, чтобы отметить: есть некоторая встроенная поддержка для генерации случайных новых идентификаторов для выходов. Например. если вы установили выходной путь blob на test-output/{rand-guid}, система автоматически создаст для вас новый идентификатор. Если это соответствует вашим потребностям, то вам не нужно Binder.

using System; 
using System.IO; 
using System.Net; 
using Microsoft.Azure.WebJobs; 

public static async Task<HttpResponseMessage> 
     Run(HttpRequestMessage req, Binder binder, TraceWriter log) 
{ 
    log.Verbose($"C# HTTP function processed RequestUri={req.RequestUri}"); 

    using (var writer = await binder.BindAsync<TextWriter>(
        new BlobAttribute("test-output/result"))) 
    { 
     writer.Write("Hello World!!"); 
    } 

    return new HttpResponseMessage(HttpStatusCode.OK); 
} 

Для вашего второго вопроса, если вы хотите условно записать на выход связывания, просто не назначить какое-либо значение для связывания - вывод не должен быть произведен.

+2

Если у вас есть «использование» на писателе, чтобы убедиться, что он закрыт? –

+0

Обновлен код для добавления оператора using. – mathewc

+2

круто! Я не знал, что IBinder «трюк», что я сделал: «var container = outBlob.Container; var newOutBlob = container.GetBlockBlobReference (newFileName); ': $ – Nicolocodev

 Смежные вопросы

  • Нет связанных вопросов^_^