Открытие SqlConnection внутри ошибки TransactionScope
Мы пытались использовать SqlConnection
в пределах TransactionScope
, Когда мы создаем сайт и пробуем этот вызов базы данных, мы сталкиваемся с ошибкой:
Произошла ошибка транспортного уровня при получении результатов с сервера. (провайдер: провайдер TCP, ошибка: 0 - существующее соединение было принудительно закрыто удаленным хостом.)
Ошибка происходит на линии cnn.Open()
,
using (var scope = new TransactionScope())
using (var cnn = new SqlConnection(connectionString))
{
cnn.Open();
int result = cnn.QuerySingle<int>("SELECT 1");
Console.WriteLine(result);
}
Мы создали консольное приложение, чтобы выяснить, в чем дело, и обнаружили, что, изменив ключевое слово строки пула "Pooling" с "false" на "true", можно запустить его в консольном приложении и успешно вернуть наш результат.
Мы внесли те же изменения в строку подключения нашего сайта, что и та же ошибка, что и до возврата.
Есть ли причина, по которой этот код не работает?
1 ответ
Я предполагал, что web.config является законным, поскольку просмотр файла через службу Kudu показал ожидаемую строку подключения, но, очевидно, это не так в Azure.
Я обнаружил, что профиль публикации Azure переопределяет нашу строку подключения web.config, и это переопределение по-прежнему содержало "Pooling=false".
Удаление этого теперь позволяет нашему коду работать так, как задумано.
Этот пост в блоге объясняет больше:
"Когда этот код выполняется на локальном компьютере разработчика, возвращаемое значение будет тем же, что и в файле web.config. Однако, когда этот код выполняется на веб-сайтах Windows Azure, возвращаемое значение вместо этого будет переопределено значением, введенным на портале. "