Отладка Azure Функции локально - PullRequest
1 голос
/ 08 марта 2019

У меня есть функция в стандарте .Net 2.0:

    [FunctionName("A_Test")]
    public static async Task<string> Test(ILogger log, ExecutionContext context)
    {
        log.LogInformation("test");
        return "hello";
    }

в соответствии с этой статьей: https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local раздел "Функции, не вызываемые HTTP"

"Для всехвиды функций, отличные от HTTP-триггеров и веб-хуков, вы можете проверить свои функции локально, вызвав конечную точку администрирования. Вызов этой конечной точки с помощью HTTP-запроса POST на локальном сервере вызывает функцию. При желании вы можете передать тестовые данные для выполнения в теле.запроса POST. Эта функция аналогична вкладке «Тест» на портале Azure.

Вы вызываете следующую конечную точку администратора для запуска не-HTTP-функций: «

 http://localhost:{port}/admin/functions/{function_name}

Я должен бытьв состоянии протестировать не-http триггерные функции с помощью:

curl --request POST -H "Content-Type:application/json" --data '{}' http://localhost:7071/admin/functions/A_Test -v

Однако при запуске в качестве отладки все, что я получаю, это ошибка 400:

[08/03/2019 12:59:08] Host lock lease acquired by instance ID '000000000000000000000000BED482F9'.
[08/03/2019 12:59:09] Executing HTTP request: {
[08/03/2019 12:59:09]   "requestId": "6dba82a1-65bf-4e10-bcc2-1e7ecdb3524c",
[08/03/2019 12:59:09]   "method": "POST",
[08/03/2019 12:59:09]   "uri": "/admin/functions/A_Test"
[08/03/2019 12:59:09] }
[08/03/2019 12:59:10] Executed HTTP request: {
[08/03/2019 12:59:10]   "requestId": "6dba82a1-65bf-4e10-bcc2-1e7ecdb3524c",
[08/03/2019 12:59:10]   "method": "POST",
[08/03/2019 12:59:10]   "uri": "/admin/functions/A_Test",
[08/03/2019 12:59:10]   "identities": [
[08/03/2019 12:59:10]     {
[08/03/2019 12:59:10]       "type": "WebJobsAuthLevel",
[08/03/2019 12:59:10]       "level": "Admin"
[08/03/2019 12:59:10]     },
[08/03/2019 12:59:10]     {
[08/03/2019 12:59:10]       "type": "WebJobsAuthLevel",
[08/03/2019 12:59:10]       "level": "Admin"
[08/03/2019 12:59:10]     }
[08/03/2019 12:59:10]   ],
[08/03/2019 12:59:10]   "status": 400,
[08/03/2019 12:59:10]   "duration": 614
[08/03/2019 12:59:10] }

Почему?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Проблема здесь в том, что curl включает кавычки из --data '{}' в фактическое тело запроса POST.

Функция Azure ожидает такой тип тела:

{}

И взавиток реальности посылает это:

'{}'

Решение состоит в том, чтобы не использовать кавычки для аргумента --data, например:

curl --request POST -H "Content-Type:application/json" --data {} http://localhost:7071/admin/functions/A_Test -v

0 голосов
/ 08 марта 2019

Ваша функция не связана с каким-либо триггером, вероятно, она не идентифицирована как триггер. Вы можете добавить триггер таймера, например.

Также может быть применим следующий подход / хак: Когда у меня есть триггер, отличный от HTTP, и я хочу проверить его локально, я извлекаю фактическую логику в свой собственный класс. Затем я открываю отдельный триггер HTTP, который используется только для тестирования.

...