[ Обновление : Действительно, в платформе функций Azure до выпуска v2 была ошибка, исправленная после сообщения об этом. ]
Кажется, есть проблема с инициализацией системы конфигурации при локальном запуске в последней версии Visual Studio 2017 и последней версии расширения функций Azure. Кроме того, этот проект использует V2 платформы функций Azure.
Исключение выдается, как только я пытаюсь открыть соединение MySQL с:
connection.Open();
Это исключение, которое возникает:
System.Private.CoreLib: Exception while executing function: MyAzureFunctionName.
MySql.Data: The type initializer for 'MySql.Data.MySqlClient.Replication.ReplicationManager' threw an exception.
MySql.Data: The type initializer for 'MySql.Data.MySqlClient.MySqlConfiguration' threw an exception.
System.Configuration.ConfigurationManager: Configuration system failed to initialize.
System.Configuration.ConfigurationManager: Unrecognized configuration section system.serviceModel. (*LocalPath*\AppData\Local\Azure.Functions.V2.Cli\func.dll.config line 204).
Он жалуется на нераспознанный раздел конфигурации. У меня есть local.settings.json
файл, и он содержит несколько настроек приложения. Полная трассировка стека доступна здесь:
at MySql.Data.MySqlClient.Replication.ReplicationManager.IsReplicationGroup(String groupName)
at MySql.Data.MySqlClient.MySqlConnection.Open()
at Internal.Functions.TestRemoteDatabaseConnection.Run(HttpRequest req, ILogger log, ExecutionContext context) in C:\Users\foo\Source\Repos\Functions\TestRemoteDatabaseConnection.cs:line xx
Вот полная функция теста:
using System;
using System.Configuration;
using System.Data;
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 Microsoft.Extensions.Logging;
using MySql.Data.MySqlClient;
using Newtonsoft.Json;
namespace Internal.Functions
{
public static class TestRemoteDatabaseConnection
{
[FunctionName("TestRemoteDatabaseConnection")]
public static IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]
HttpRequest req, ILogger log)
{
log.LogInformation("Testing a remote database connection...");
var connectionString = Environment.GetEnvironmentVariable("DATABASE_CONNECTION");
using (var connection = new MySqlConnection(connectionString))
{
var sqlStatement = "SELECT 1";
try
{
connection.Open();
}
catch (Exception e)
{
log.LogError(e, "Unable to create connection");
throw;
}
var cmd = new MySqlCommand()
{
CommandText = sqlStatement,
Connection = connection,
CommandType = CommandType.Text,
CommandTimeout = 10800 // 3 minutes
};
var result = cmd.ExecuteScalar();
return new OkObjectResult($"Connection succeeded to remote database connection. Result: {result}");
}
}
}
}
Фрагмент ссылки на пакет из файла .csproj
:
<ItemGroup>
<PackageReference Include="Analytics" Version="3.2.0-alpha" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.13" />
<PackageReference Include="MySql.Data" Version="8.0.11" />
</ItemGroup>
Есть идеи, что может происходить?