gpt4 book ai didi

c# - 使用 Sql Azure 的 Azure 应用服务上的 TransactionScope

转载 作者:太空宇宙 更新时间:2023-11-03 13:09:10 25 4
gpt4 key购买 nike

因此,我在 WebAPI Controller 中有以下简单代码,该代码已发布到 Azure 应用服务网站。

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

100% 的情况下,这会在 Open 调用中出现传输错误异常:

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.)

我尝试使用 transient 故障处理 EL block 中的 ReliablSqlConnection 使用指数重试策略,但最终导致事务超时。

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

如果我在本地计算机上运行相同的代码,且连接字符串仍指向 SQL Azure 数据库,则它可以与 TransactionScope 配合使用。

我无法在 Azure 网站的事务内打开数据库连接,可能会发生什么情况?

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

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

最佳答案

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

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

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

关于c# - 使用 Sql Azure 的 Azure 应用服务上的 TransactionScope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29809659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com