C# 使用Sql Azure的Azure应用程序服务上的TransactionScope

C# 使用Sql Azure的Azure应用程序服务上的TransactionScope,c#,azure,azure-sql-database,transactionscope,azure-web-app-service,C#,Azure,Azure Sql Database,Transactionscope,Azure Web App Service,因此,我在发布到Azure应用程序服务网站的WebAPI控制器中有以下简单代码 using (var tx = new TransactionScope()) { var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["OrganizationManagement"].ConnectionString); connection.Open(); return Enumerable.Emp

因此,我在发布到Azure应用程序服务网站的WebAPI控制器中有以下简单代码

using (var tx = new TransactionScope())
{
   var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["OrganizationManagement"].ConnectionString);
   connection.Open();
   return Enumerable.Empty<TimeSessionDTO>();
}
使用(var tx=new TransactionScope())
{
var connection=new-SqlConnection(ConfigurationManager.ConnectionStrings[“OrganizationManagement”].ConnectionString);
connection.Open();
返回可枚举的.Empty();
}
100%的情况下,这会在打开的调用中给我一个传输错误异常:

从接收结果时发生传输级别错误 服务器。(提供程序:TCP提供程序,错误:0-已创建现有连接。) 由远程主机强制关闭。)

我曾尝试使用指数重试策略从瞬态故障处理EL块使用ReliablSqlConnection,但最终导致事务超时

如果我移除周围的TransactionScope,它会工作并且不会引发异常

如果我在本地计算机上运行相同的代码,并且连接字符串仍然指向SQLAzure数据库,则TransactionScope可以正常工作

在Azure网站中,我无法在事务内部打开数据库连接,这可能是怎么回事

更新:我还应该注意,在TransactionScope中使用实体框架DbContext工作正常。由于某种原因,它被普通的ADO.NET阻塞了


仅供参考,我还在Azure上的一个新MVC应用程序上试用了它,结果也是一样的。我就是不明白:)

哇,所以问题似乎出在连接字符串上。当我第一次部署数据库时,我让数据库项目从server/database/user info构建连接字符串,我后来将其添加到WebAPI项目中的Web.config文件中。然后,当我部署WebAPI项目时,我猜它在发布配置文件中保存了该连接字符串

事实证明,连接字符串使用的格式和选项与在Azure门户中查看连接字符串时提供的格式和选项略有不同。我已经在Web.config文件中对其进行了更改,但发布配置文件中的内容似乎覆盖了Web.config中的内容,因此更改从未在服务器上生效


我想这解释了为什么我在本地运行它时它能工作,但我不知道为什么它只有在事务中才失败。

实际上,这也不再适用于实体框架。我真的不明白:)