从服务器接收结果时发生传输级错误。 (提供程序:会话提供程序,错误:19 - 物理连接不可用) - 间歇性地发生,使用混合连接器从Azure API连接到本地数据库
我尝试从应用服务资源(Web API)连接到本地服务器上的SQL数据库。配置经典混合连接端点到内部部署数据库。
答案 0 :(得分:7)
根本原因:
在SQL数据库中,有一个属性“自动关闭”'在“选项”选项卡中,默认情况下设置为TRUE。
Azure Service(API)建立与SQL Server的连接时。 Azure尝试维护相同的连接池并尝试重用并重新连接到它。
由于我们已将“自动关闭”设置为“TRUE”,因此SQL数据库会在某段时间后清除现有连接。 Azure尝试重新连接已由SQL数据库清除的早期连接。这导致物理连接不可用 - 错误19'。
解决方案:
在SQL db中,转到数据库属性。导航到' OPTIONS'页面并展开自动选项卡并设置'自动关闭'财产为' FALSE' 。
确保重新启动Azure应用程序和数据库服务器,以确保不使用旧连接。
问题已解决。
注意:这是其中一个原因(发生在我身上)。
摆脱此错误的另一个有用方法是使用Entity Framework 1.1.0的RETRY LOGIC
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的重试逻辑。
答案 1 :(得分:0)
似乎您需要按照here所述向Web API添加重试逻辑。 &#34;物理连接不可用&#34;错误可能由瞬态错误引起,如this Microsoft文档中所述。
&#34;瞬态故障错误通常表现为来自客户端程序的以下错误消息之一:+
•服务器上的数据库当前不可用。请稍后重试连接。如果问题仍然存在,请联系客户支持,并为其提供会话跟踪ID
•服务器上的数据库当前不可用。请稍后重试连接。如果问题仍然存在,请联系客户支持,并为其提供会话跟踪ID。 (Microsoft SQL Server,错误:40613)
•远程主机强制关闭现有连接。
•System.Data.Entity.Core.EntityCommandExecutionException:执行命令定义时发生错误。有关详细信息,请参阅内部异常---&GT; System.Data.SqlClient.SqlException:从服务器接收结果时发生传输级错误。 (提供者:会话提供者,错误:19 - 物理连接不可用)
•对辅助数据库的连接尝试失败,因为数据库正在进行重新配置,并且在主数据库上处于活动转换过程中时正忙于应用新页面。&#34;