我为我的.NET程序创建了一个Dockerfile。该程序在我的桌面上以及没有Docker的Windows Server 2016(Azure VM)上运行良好。当我尝试将其作为容器运行时(基于microsoft/windowsservercore),那么当连接到我的Azure SQL实例时,我经常会遇到数据库错误。Windows容器导致Azure SQL连接失败
我有两个Azure SQL实例正在运行(P1和空载)。当建立连接时,它们非常快,但问题是连接通常无法建立。看起来网络非常不稳定。这些是我扔的典型错误:
System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
内部异常报告网络路径找不到。起初我以为它可能是我的本地机器,但它在Azure中的Windows Server 2016(带容器)VM实例上也存在问题。
为了查明问题,我创建了一个每5秒钟连接到我的数据库的测试程序(并运行SELECT COUNT(*) from sysobjects
)。这个程序总是能够找到数据库。
看来,我的其他程序经常在启动过程中失败,但在初始化过程中有很多数据库调用。我怀疑线程,连接池,有什么不同...
任何线索?
命名管道提供的是一个在哪些SQL尝试,如果你没有明确设置协议使用协议的顺序。所以如果你想避免首先尝试netpipes,你必须强制SQL使用tcp。 –