Функции Azure + Azure SQL: ошибка поставщика сеанса 19 — физическое подключение невозможно

Это начало происходить сегодня ... Я искал решение, но я просто могу найти его, используя разные сценарии, например, вне функций Azure или используя другую клиентскую библиотеку. В любом случае...

Это мой клиент:

      using System;
using endpoints3t.Models;
using System.Data.SqlClient;

namespace endpoints3t.DataAccess
{
    internal class MssqlClient
    {
        public MsSqlServer Client;
        private string thisEnv = Environment.GetEnvironmentVariable("ThisEnvironment");
        public MssqlClient()
        {
            var str = Environment.GetEnvironmentVariable($"MsSql_{thisEnv}_ConnectionString");
            SqlConnection c = new SqlConnection(str);
            Client = new MsSqlServer()
            {
                Client = c
            };
        }
    }
}

А это пример простого вызова:

      public async Task<List<Something>> GetSomeData()
        {
            if (msSQL.Client.Client.State == System.Data.ConnectionState.Closed)
            {
                msSQL.Client.Client.Open();
            }
            using (SqlCommand cmd = new SqlCommand("ExecMyStoredProcedure", msSQL.Client.Client))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                var reader = await cmd.ExecuteReaderAsync();
                while (reader.Read())
                {
                    var item = new Something()
                    {
                        Id = Guid.Parse(reader["Id"].ToString())
                    };
                    result.Add(item);
                }
            }
            return result;
        }

Согласно документации, System.Data.SqlClient управляет открытием/закрытием моего соединения, и, возможно, по этой причине я не могу найти много документации о том, как справиться с этой ситуацией. Любая помощь ?

1 ответ

Если вы хотите подключить какие-либо службы за пределами функции azure, вам необходимо внедрить эту функцию.

Обходной путь следует

Здесь я создал лазурную функцию и создал класс подключения для открытия подключения и вставки в базу данных SQL .

Примечание. Когда вы пытаетесь подключиться к серверу Azure SQL, у вас есть доступ для подключения. Убедитесь, что ваш IP-адрес добавлен в брандмауэр.

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

Триггерная функция

      public class Function1
    {
        private readonly connectdb getconnection;
        public Function1(connectdb getconnection)
        {
            this.getconnection = getconnection ?? throw new ArgumentNullException(nameof(getconnection));
        }
        [FunctionName("Function1")]
        public async Task Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, ILogger log)
        {
            // Get the connection string from app settings and use it to create a connection.
            var str = Environment.GetEnvironmentVariable("sqldb_connection");
            var resconn = await getconnection.Getconn(str);
            log.LogInformation("$\"{resconn} rows were updated\"" + resconn);
        }
    }

Connection.cs

      public async Task<int> Getconn(string myconn)
        {
            using (SqlConnection conn = new SqlConnection(myconn))
            {
                conn.Open();
                var text = " Insert into <table name>(col2,col2,col3) Values('AAA','BBB','CCC')";

                using (SqlCommand cmd = new SqlCommand(text, conn))
                {
                    // Execute the command and log the # rows affected.
                    var rows = await cmd.ExecuteNonQueryAsync();
                    return rows;
                }
            }
        }

Результат

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

GIF-версия примера результата

Другие вопросы по тегам