Как получить ILogger из функции Activity? - PullRequest
0 голосов
/ 08 февраля 2019

Я использую функцию Durable Azure в прототипе для будущего проекта.

По сути, у меня есть функция Client Azure, запускаемая по запросу HTTP POST, который запускает Orchestrator.Затем оркестр решает активировать действие.Ничего сложного.

Вот пример того, что я делаю:

[FunctionName("ClientFunction")]
public static async Task<HttpResponseMessage> OnHttpTriggerAsync([HttpTrigger(AuthorizationLevel.Anonymous, "post")]
            HttpRequestMessage request, [OrchestrationClient] DurableOrchestrationClient starter, ILogger logger)
{
    // Triggers the orchestrator.
    string instanceId = await starter.StartNewAsync("OrchestratorFunction", null);

    return new HttpResponseMessage(HttpStatusCode.OK);
}


[FunctionName("OrchestratorFunction")]
public static async Task DoOrchestrationThingsAsync([OrchestrationTrigger] DurableOrchestrationContext context, ILogger logger)
{
    // Triggers some serious activity.
    await context.CallActivityAsync("ActivityFunction", null);
}

[FunctionName("ActivityFunction")]
public static Task DoAnAwesomeActivity([ActivityTrigger] DurableActivityContext context)
{
    // Short & Sweet activity...
    // Wait... Where's my logger?
}

Функции Orchestrator и Client получают ILogger, но не функцию Activity;как указано в документации (либо конкретный параметр, либо экземпляр DurableActivityContext), функция Activity получает только один параметр.И у меня нет впечатления, что статический класс, в котором объявлены эти методы, может хранить ссылку на это ILogger.

Я понимаю, что функция Activity должна выполнять одну небольшую работу, но мне было бы удобнееесли я смог записать, что действие было вызвано с соответствующими значениями, если что-то пойдет не так (и это будет :)).

Вопрос

Как может действиеполучить доступ к ILogger?

1 Ответ

0 голосов
/ 09 февраля 2019

Невозможно напрямую передать несколько параметров в функцию деятельности.В этом случае рекомендуется передавать массив объектов или использовать объекты ValueTuples в .NET.

Это ограничение , о котором вы беспокоитесь, говорит о параметрах, которые мы передаемот оркестратора до функции деятельности.Это не значит, что мы можем использовать только один параметр в сигнатуре метода Activity.Не стесняйтесь добавлять туда ILogger и завершать свою работу по мере необходимости.

...