HTTP-функция Azure запускает 2.x с выходом из локальной базы данных Cosmos DB - PullRequest
0 голосов
/ 01 сентября 2018

Я разрабатываю 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

Я использую инструменты Function Core 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

1 Ответ

0 голосов
/ 01 сентября 2018

Это вызвано ссылками 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. Удалить старую папку с инструментами Function Core (Cli) %localappdata%\AzureFunctionsTools.

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

    enter image description here

    enter image description here

Обновление

  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 версии 2.

    например. 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 в 2.5.1. (Измените свое имя пользователя)

    {
     "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.
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...