从服务器接收结果时发生了传输级错误。(提供程序: 会话提供程序, 错误: 19 - 物理连接不可用) - 这是间歇性的,使用混合连接器从Azure API连接到本地数据库
我尝试从应用服务资源(Web API)连接到本地服务器中的SQL数据库。配置了经典混合连接端点以连接到本地db。
从服务器接收结果时发生了传输级错误。(提供程序: 会话提供程序, 错误: 19 - 物理连接不可用) - 这是间歇性的,使用混合连接器从Azure API连接到本地数据库
我尝试从应用服务资源(Web API)连接到本地服务器中的SQL数据库。配置了经典混合连接端点以连接到本地db。
根本原因:
在 SQL 数据库中,选项卡中有一个名为“自动关闭”的属性,默认设置为 TRUE。
当 Azure 服务(API)连接到 SQL 服务器时,Azure 尝试维护相同的连接池并尝试重用和重新连接它。
由于我们将“自动关闭”设置为 TRUE,SQL 数据库会在一段时间后清除现有连接。而 Azure 尝试重新连接早先已被 SQL 数据库清除的连接。这导致“物理连接不可用 - 错误 19”。
解决方案:
在 SQL 数据库中,转到数据库属性。导航到“OPTIONS”页面并展开自动选项卡,将'AUTO CLOSE'属性设置为'FALSE'。
确保您重新启动 Azure 应用程序和数据库服务器,以确保不使用旧连接。
问题已解决。
注意: 这是我遇到的其中之一原因。
另一个有用的方法是使用 Entity Framework 1.1.0 的重试逻辑来消除此错误。
services.AddDbContext<DbContext>(options => options.UseSqlServer('yourconnectionstring',
sqlServerOptionsAction: sqlOptions =>
{
sqlOptions.EnableRetryOnFailure(
maxRetryCount: 5,
maxRetryDelay: TimeSpan.FromSeconds(30),
errorNumbersToAdd: new List<int>() { 19 });
}));
在重试逻辑中,不包括错误19。因此,您必须传递错误代码19以设置错误代码19的重试逻辑。