Итак, у меня есть следующий тривиальный код в контроллере WebAPI, который публикуется на веб-сайте службы Azure App.TransactionScope на Azure App Services с Sql Azure
using (var tx = new TransactionScope())
{
var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["OrganizationManagement"].ConnectionString);
connection.Open();
return Enumerable.Empty<TimeSessionDTO>();
}
100% времени, это дает мне исключение транспортной ошибки на открытом вызове:
A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
Я попытался с помощью ReliablSqlConnection от Transient Fault Handling EL блок с помощью экспоненциальной политики повторных попыток, и я просто закончил с таймаутом транзакции с этим.
Если я удалю окружающий TransactionScope, он работает и не генерирует исключения.
Если я запустил тот же код на своей локальной машине, что строка подключения все еще указывает на базу данных SQL Azure, она отлично работает с TransactionScope.
Что может случиться, что я не могу открыть соединение с базой данных внутри транзакции на веб-сайте Azure?
Обновление: Следует также отметить, что использование Entity Framework DbContext внутри TransactionScope работало нормально. По какой-то причине это просто задыхается от простого ADO.NET.
FYI Я также пробовал его в новом приложении MVC на Azure с тем же результатом. Я просто этого не понимаю :)
На самом деле это тоже не работает с Entity Framework. Я действительно не понимаю :) – Gerald