Открытие 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, возвращаемое значение вместо этого будет переопределено значением, введенным на портале. "

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