Шаблон по умолчанию для функции Azure не может работать локально - PullRequest
1 голос
/ 15 мая 2019

Я пытаюсь создать функцию Azure и проверить ее локально. У меня MSFT VS2017 + Azure Dev Tools. Я создал проект функции Azure с TimerTrigger. Я ничего не менял в шаблоне по умолчанию.

Функция:

    [FunctionName("Function1")]
    public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
    {
        log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    }

Когда я запускаю его:

              %%%%%%
             %%%%%%
        @   %%%%%%    @
      @@   %%%%%%      @@
   @@@    %%%%%%%%%%%    @@@
 @@      %%%%%%%%%%        @@
   @@         %%%%       @@
     @@      %%%       @@
       @@    %%      @@
            %%
            %

Azure Functions Core Tools (2.7.1158 Commit hash: f2d2a2816e038165826c7409c6d10c0527e8955b)
Function Runtime Version: 2.0.12438.0
SKipping 'FUNCTIONS_CORETOOLS_ENVIRONMENT' because value is null
[5/15/2019 10:11:50 AM] Starting Rpc Initialization Service.
[5/15/2019 10:11:50 AM] Initializing RpcServer
[5/15/2019 10:11:50 AM] Building host: startup suppressed:False, configuration suppressed: False
[5/15/2019 10:11:52 AM] Initializing Host.
[5/15/2019 10:11:52 AM] Host initialization: ConsecutiveErrors=0, StartupCount=1
[5/15/2019 10:11:52 AM] LoggerFilterOptions
[5/15/2019 10:11:52 AM] {
[5/15/2019 10:11:52 AM]   "MinLevel": "None",
[5/15/2019 10:11:52 AM]   "Rules": [
[5/15/2019 10:11:52 AM]     {
[5/15/2019 10:11:52 AM]       "ProviderName": null,
[5/15/2019 10:11:52 AM]       "CategoryName": null,
[5/15/2019 10:11:52 AM]       "LogLevel": null,
[5/15/2019 10:11:52 AM]       "Filter": "<AddFilter>b__0"
[5/15/2019 10:11:52 AM]     },
[5/15/2019 10:11:52 AM]     {
[5/15/2019 10:11:52 AM]       "ProviderName": "Microsoft.Azure.WebJobs.Script.WebHost.Diagnostics.SystemLoggerProvider",
[5/15/2019 10:11:52 AM]       "CategoryName": null,
[5/15/2019 10:11:52 AM]       "LogLevel": "None",
[5/15/2019 10:11:52 AM]       "Filter": null
[5/15/2019 10:11:52 AM]     },
[5/15/2019 10:11:52 AM]     {
[5/15/2019 10:11:52 AM]       "ProviderName": "Microsoft.Azure.WebJobs.Script.WebHost.Diagnostics.SystemLoggerProvider",
[5/15/2019 10:11:52 AM]       "CategoryName": null,
[5/15/2019 10:11:52 AM]       "LogLevel": null,
[5/15/2019 10:11:52 AM]       "Filter": "<AddFilter>b__0"
[5/15/2019 10:11:52 AM]     }
[5/15/2019 10:11:52 AM]   ]
[5/15/2019 10:11:52 AM] }
[5/15/2019 10:11:52 AM] FunctionResultAggregatorOptions
[5/15/2019 10:11:52 AM] {
[5/15/2019 10:11:52 AM]   "BatchSize": 1000,
[5/15/2019 10:11:52 AM]   "FlushTimeout": "00:00:30",
[5/15/2019 10:11:52 AM]   "IsEnabled": true
[5/15/2019 10:11:52 AM] }
[5/15/2019 10:11:52 AM] SingletonOptions
[5/15/2019 10:11:52 AM] {
[5/15/2019 10:11:52 AM]   "LockPeriod": "00:00:15",
[5/15/2019 10:11:52 AM]   "ListenerLockPeriod": "00:00:15",
[5/15/2019 10:11:52 AM]   "LockAcquisitionTimeout": "10675199.02:48:05.4775807",
[5/15/2019 10:11:52 AM]   "LockAcquisitionPollingInterval": "00:00:05",
[5/15/2019 10:11:52 AM]   "ListenerLockRecoveryPollingInterval": "00:01:00"
[5/15/2019 10:11:52 AM] }
[5/15/2019 10:11:52 AM] Starting JobHost
[5/15/2019 10:11:52 AM] Starting Host (HostId=, InstanceId=79b21f7e-8904-41d9-9339-df547871c510, Version=2.0.12438.0, ProcessId=10380, AppDomainId=1, InDebugMode=False, InDiagnosticMode=False, FunctionsExtensionVersion=)
[5/15/2019 10:11:52 AM] Loading functions metadata
[5/15/2019 10:11:52 AM] 1 functions loaded
[5/15/2019 10:11:52 AM] WorkerRuntime: dotnet. Will shutdown other standby channels

и здесь это не получается:

namespace Microsoft.Azure.WebJobs.Script.Description
{
    /// <summary>
    /// Establishes an assembly load context for a extensions, functions and their dependencies.
    /// </summary>
    public partial class FunctionAssemblyLoadContext : AssemblyLoadContext
....
protected static string ResolveFunctionBaseProbingPath()
{
    string basePath = null;

    if (ScriptSettingsManager.Instance.IsAppServiceEnvironment)
    {
        string home = Environment.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteHomePath);
        basePath = Path.Combine(home, "site", "wwwroot"); // <-- HOME IS NULL and it throws ArgumentNullException
    }
    else
    {
        basePath = Environment.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebJobsScriptRoot) ?? AppContext.BaseDirectory;
    }

    return Path.Combine(basePath, "bin");
}

Кто-нибудь сталкивался с этой проблемой? Что я должен сделать, чтобы запустить шаблон функций Azure по умолчанию?

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Не удалось воспроизвести ваш вопрос. Я использую Visual Studio 2017 + Azure Dev Tools. У меня также есть та же версия Core Tools v2.0.12438.0.

Вот документация для создания функции триггера времени: https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-scheduled-function. В триггере таймера вы можете указать, как часто вы хотите запускать ваше приложение-функцию. Обратите внимание, что настройка расписания представляет собой выражение CRON из шести полей (https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-timer#cron-expressions),, например, значение '0 * / 1 * * * *' запланирует выполнение вашей функции каждую минуту.

0 голосов
/ 15 мая 2019

Скорее всего, если вы только что попытались запустить по умолчанию, проблема заключается в вашем local.settings.json.

Если вы откроете свой файл, у вас будет:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet"
  }
}

Это правильно?

Если это так, вам нужно поместить строку подключения к хранилищу в AzureWebJobsStorage.Это будет выглядеть так:

DefaultEndpointsProtocol=https;AccountName=<account_name>;AccountKey=<account_key>;EndpointSuffix=core.windows.net

Тогда скрипт должен работать без ошибок.

...