Триггер функции HTTP Azure 2.x с отказом локального узла разработчика вывода Cosmos DB

Я разрабатываю триггер http с использованием функций azure 2.x и ядра dotnet, после последнего обновления до VS 2017 15.8.2 я получаю следующую ошибку при локальном запуске функции

1/9/2018 13:30:50] Stopping Host
[1/9/2018 13:31:06] Reading host configuration file 'C:\Users\MattDouhan\source\repos\NWMposTransInput\NWMposTransInput\bin\Debug\netstandard2.0\host.json'
[1/9/2018 13:31:06] Host configuration file read:
[1/9/2018 13:31:06] {}
[1/9/2018 13:31:06] Starting Host (HostId=desktop7cks1do-260439321, InstanceId=5fd41a43-b3ca-47e4-adf6-320d40fa9613, Version=2.0.11960.0, ProcessId=13156, AppDomainId=1, Debug=False, ConsecutiveErrors=5, StartupCount=6, FunctionsExtensionVersion=)
[1/9/2018 13:31:07] A ScriptHost error has occurred
[1/9/2018 13:31:07] System.Private.CoreLib: Could not load type 'Microsoft.Azure.WebJobs.Hosting.IWebJobsStartup' from assembly 'Microsoft.Azure.WebJobs.Host, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null'.
[1/9/2018 13:31:07] Stopping Host

Я использую инструменты функционального ядра 2.0.1-Beta.35 и версию 2.0.11960.0 во время выполнения.

Функция выглядит следующим образом

using System.IO;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Azure.WebJobs.Host;
using Newtonsoft.Json;
using Microsoft.Extensions.Logging;
using System;

namespace NWMposTransInput
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]
        HttpRequest req, ILogger log,
            [CosmosDB(
            databaseName: "xxxx",
            collectionName: "yyyy",
            ConnectionStringSetting = "CosmosDbConnection")]out dynamic document,
            ILogger log2)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            string requestBody = new StreamReader(req.Body).ReadToEnd();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            name = name ?? data?.name;

            document = new { SSourceSystem = "jongelSystem",
                             id = Guid.NewGuid(),
                             SSourceSystemVersion = "1.1",
                             STransactionId = "12345"};

            log.LogInformation($"C# Queue trigger function inserted one row");
            log.LogInformation($"Description={req.Body}");

            return name != null
                ? (ActionResult)new OkObjectResult($"Hello, {name}")
                : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
        }
    }

    public class NWCloudOrder
    {
        public string Id { get; set; }
        public string SSourceSystem { get; set; }
        public string SSourceSystemVersion { get; set; }
        public string STransactionId { get; set; }
    }
}

--- РЕДАКТИРОВАТЬ --- Убедившись, что я использую правильную среду выполнения, теперь возникает следующая ошибка

[2/9/2018 05:44:15] A ScriptHost error has occurred
[2/9/2018 05:44:15] System.Private.CoreLib: Could not load file or assembly 'Microsoft.AspNetCore.Mvc.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. Could not find or load a specific file. (Exception from HRESULT: 0x80131621). System.Private.CoreLib: Could not load file or assembly 'Microsoft.AspNetCore.Mvc.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.
[2/9/2018 05:44:15] Stopping Host

У меня установлен 2.2.0-preview1-35029


comment
Измените свой вопрос, включив в него сведения о вашей функции Azure. Без кода и всего лишь нескольких операторов журнала ошибок трудно догадаться, что может происходить. Кроме того, вы отметили это как azure-cosmosdb - это актуально? Уточните, пожалуйста, при редактировании.   -  person David Makogon    schedule 01.09.2018
comment
уточняется по запросу   -  person Matt Douhan    schedule 01.09.2018


Ответы (1)


Это вызвано ссылкой на Microsoft.Azure.WebJobs.Extensions.CosmosDB последней версии 3.0.1-beta1/2 в старой среде выполнения функции 2.0.11960.0. Microsoft.NET.Sdk.Functions 1.0.19 и Microsoft.Azure.WebJobs.Extensions.CosmosDB 3.0.1-beta2 зависит от среды выполнения 2.0.12050.0.

Проверьте эту проблему с соответствующей информацией об ошибках для критических изменений. последней версии 2.0.12050.0.

Если вы не хотите сейчас переходить на последнюю версию среды выполнения, понизьте версию Microsoft.Azure.WebJobs.Extensions.CosmosDB до 3.0.0-beta7 и Microsoft.NET.Sdk.Functions до 1.0.14.

В противном случае просто убедитесь, что VS использует последнюю версию среды выполнения функции 2.0.12050.0.

  1. В меню VS-> Расширения и обновления. Найдите функции Azure и инструменты для работы в Интернете. Убедитесь, что оно> = 15.8.5023 (сначала необходимо обновить VS до 15.8).

  2. Удалите старую папку инструментов функционального ядра (Cli) %localappdata%\AzureFunctionsTools.

  3. Перезапустите VS и создайте новую функцию Azure. Подождите в диалоговом окне создания, пока VS загрузит новые Cli и шаблоны, пока мы не увидим изменение подсказки на «Обновления готовы».

    введите здесь описание изображения

    введите здесь описание изображения

Обновить

  1. Проверьте вывод Cli, я боюсь, что используется более старая версия 2.0.11651.0.

    Starting Host (HostId=xxx, InstanceId=xxx, Version=2.0.11651.0, ...)
    

    Перейдите к %localappdata%\AzureFunctionsTools\Releases, вы также можете увидеть пустую папку 2.5.1.

    Загрузка не удалась по какой-то причине, например по сети. Повторите описанные выше шаги еще раз. Если не работает, попробуйте скачать Cli вручную. Сначала закройте VS.

    1). Откройте %localappdata%\AzureFunctionsTools\feed.json, чтобы найти URL-адрес последней загрузки v2.

    например cli: https://functionscdn.azureedge.net/public/2.0.1-beta.36/Azure.Functions.Cli.win-x86.2.0.1-beta.36.zip.

    2). Переименуйте распакованную папку в cli, поместите в 2.5.1.

    3). Переместите папку templates из папки cli в 2.5.1.

    4). Создайте manifest.json под _23 _. (Измените имя пользователя)

    {
     "ReleaseName": "2.5.1",
     "CliEntrypointPath": "C:\\Users\\UserName\\AppData\\Local\\AzureFunctionsTools\\Releases\\2.5.1\\cli\\func.exe",
     "TemplatesDirectory": "C:\\Users\\UserName\\AppData\\Local\\AzureFunctionsTools\\Releases\\2.5.1\\templates",
     "FunctionsExtensionVersion": "~2",
     "SdkPackageVersion": "1.0.19"
    }
    
  2. SDK функций ссылается на Microsoft.AspNetCore.Mvc.Abstractions 2.1.0 по дизайну. Удалите 2.2.0-preview1-35029, иначе при выполнении может появиться ошибка.

    Microsoft.Azure.WebJobs.Host: Exception binding parameter 'req'. System.Private.CoreLib: Cannot create an abstract class.
    
person Jerry Liu    schedule 01.09.2018
comment
Это вызывает отдельную ошибку, я отредактировал свой вопрос, чтобы добавить текущую проблему - person Matt Douhan; 02.09.2018
comment
Работает как шарм, стоит отметить, что шаблоны не могут быть загружены в Китае без VpN, поэтому мое обновление не удалось - person Matt Douhan; 03.09.2018
comment
@MattDouhan Да, это постоянная боль, иногда мне не удавалось загрузить его даже с помощью VPN. Не могли бы вы принять мой ответ, чтобы закрыть вопрос? - person Jerry Liu; 03.09.2018