Функции 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;
}
}
}