【问题标题】:TransactionScope on Azure App Services with Sql Azure带有 Sql Azure 的 Azure 应用服务上的 TransactionScope
【发布时间】:2015-04-22 21:57:34
【问题描述】:

所以我在发布到 Azure 应用服务网站的 WebAPI 控制器中有以下简单代码。

using (var tx = new TransactionScope())
{
   var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["OrganizationManagement"].ConnectionString);
   connection.Open();
   return Enumerable.Empty<TimeSessionDTO>();
}

100% 的情况下,这会在 Open 调用中给我一个传输错误异常:

从 服务器。 (提供者:TCP 提供者,错误:0 - 现有连接是 被远程主机强行关闭。)

我已经尝试使用指数重试策略从瞬态故障处理 EL 块中使用 ReliablSqlConnection,但我最终会遇到事务超时。

如果我删除周围的 TransactionScope,它会起作用并且不会引发异常。

如果我在本地机器上运行相同的代码,并且连接字符串仍然指向 SQL Azure 数据库,那么它可以与 TransactionScope 一起正常工作。

我无法在 Azure 网站的事务中打开数据库连接是怎么回事?

更新:我还应该注意,在 TransactionScope 内使用实体框架 DbContext 工作正常。出于某种原因,它只是在普通的 ADO.NET 上令人窒息。

仅供参考,我还在 Azure 上的新 MVC 应用程序上进行了尝试,结果相同。我只是不明白:)

【问题讨论】:

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

标签: c# azure azure-sql-database transactionscope azure-web-app-service


【解决方案1】:

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

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

我想这解释了为什么当我在本地运行它时它会起作用,但我不知道为什么它只在事务中失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2016-05-04
    • 2020-04-07
    • 2018-12-19
    • 1970-01-01
    相关资源
    最近更新 更多