Функция Azure beta/v2 - Зависимости интеграции - SQL/MySql

Я использую бета-версию функций Azure, потому что я использую Graph API и хочу подключить базу данных (MySQL/SQL).

Просто используя последнюю бета-версию /v2 со следующим руководством от Microsoft для подключения базы данных SQL, я получаю сообщение об ошибке.

Я знаю, что есть несколько различий в отношении интеграции зависимостей. Я имею в виду использование и структуру файла "project.json" вместо "function.proj"

Что я должен сделать, чтобы это работало?

Это возвращенная ошибка. Напоминаю, что это бета-версия, потому что в моем реальном проекте я также использую Graph Api:

2018-08-08T06:43:59  Welcome, you are now connected to log-streaming service.
2018-08-08T06:44:06.613 [Information] Executing 'Functions.TimerTriggerCSharp1' (Reason='This function was programmatically called via the host APIs.', Id=a3eb2b63-b336-4f56-bc3e-a1862b8f2d06)
2018-08-08T06:44:06.671 [Information] C# Timer trigger function executed at: 8/8/2018 6:44:06 AM
2018-08-08T06:44:06.786 [Error] System.Private.CoreLib: Exception while executing function: Functions.TimerTriggerCSharp1. System.Private.CoreLib: Exception has been thrown by the target of an invocation. f-TimerTriggerCSharp1__-1020707796: Object reference not set to an instance of an object.
2018-08-08T06:44:06.906 [Error] Executed 'Functions.TimerTriggerCSharp1' (Failed, Id=a3eb2b63-b336-4f56-bc3e-a1862b8f2d06)
2018-08-08T06:45:07.294 [Information] Executing 'Functions.TimerTriggerCSharp1' (Reason='Timer fired at 2018-08-08T06:45:07.2936684+00:00', Id=2a28db1e-f70f-4919-b7c9-078d39fb12a6)
2018-08-08T06:45:07.300 [Information] C# Timer trigger function executed at: 8/8/2018 6:45:07 AM
2018-08-08T06:45:07.303 [Error] System.Private.CoreLib: Exception while executing function: Functions.TimerTriggerCSharp1. System.Private.CoreLib: Exception has been thrown by the target of an invocation. f-TimerTriggerCSharp1__-1020707796: Object reference not set to an instance of an object.
2018-08-08T06:45:07.893 [Error] Executed 'Functions.TimerTriggerCSharp1' (Failed, Id=2a28db1e-f70f-4919-b7c9-078d39fb12a6)

Это мой файл "run.csx":

#r "System.Configuration"
#r "System.Data"


using System;
using System.Configuration;
using System.Data.SqlClient;
using System.Threading.Tasks;

public static void Run(TimerInfo myTimer, ILogger log)
{
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");

    var str = ConfigurationManager.ConnectionStrings["SqlConnection"].ConnectionString;
    using (SqlConnection conn = new SqlConnection(str))
    {
        conn.Open();
        //Just a test
        var text = "UPDATE Persons SET FirstName = 'Alfred Schmidt', LastName= 'Frankfurt'";

        using (SqlCommand cmd = new SqlCommand(text, conn))
        {
            // Execute the command and log the # rows affected.
            //var rows = await cmd.ExecuteNonQueryAsync();
            //log.Info($"{rows} rows were updated");
            log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");

        }
    }
}

Обновить

Я пытаюсь подключить базу данных MySQL вместо SQL, и я получаю следующую ошибку:

2018-08-08T12:54:46.569 [Error] run.csx(15,27): error CS0246: The type or namespace name 'MySqlConnection' could not be found (are you missing a using directive or an assembly reference?) 

Это мои зависимости:

#r "System.Configuration" 
#r "System.Data" 
using System; 
using System.Configuration; 
using MySql.Data.MySqlClient; 
using System.Threading.Tasks; 

var str = Environment.GetEnvironmentVariable("MYSQLCONNSTR_MySqlConnection");

1 ответ

Решение

ConfigurationManager больше не поддерживается в функции v2, см. Соответствующий комментарий.

В версии 2.0 мы перешли на новую модель конфигурации ASP.NET Core. Мы намерены поддерживать связывание с экземпляром IConfiguration, который будет предоставлять аналогичный API, но в то же время обходной путь заключается в чтении переменных среды, а не в использовании ConfigurationManager и его API.

Таким образом, вы можете использовать следующую инструкцию, чтобы получить строку подключения. Префикс SQLAZURECONNSTR_ добавляется Azure для строки подключения SQLAzure, установленной в разделе Строки подключения.

var str = Environment.GetEnvironmentVariable("SQLAZURECONNSTR_SqlConnection");

Обновление для MySql Connection

Идти к https://<functionappname>.scm.azurewebsites.net/dev/wwwroot/, это показывает содержание функции приложения. Щелкните правой кнопкой мыши по папке с вашими функциями, Новый файл, создайте function.proj как ниже. Добавление этого файла зависимостей импортирует связанную сборку, чтобы вы могли на нее ссылаться.

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="MySql.Data" Version="8.0.12" />
    </ItemGroup>
</Project>
Другие вопросы по тегам