Linux上的.NET Core如何确定SQL Server实例侦听的端口?

我有一个ASP.NET Core 1.1 Web API,它在Ubuntu的Docker容器中运行,并连接到Windows服务器上的SQL Server数据库(SQL Server 2012 SP3)。 这在四个外出环境中的三个中都能正常工作,但是在一个环境中,它无法连接到SQL Server,我试图对其进行故障排除。

错误是:

未处理的exception:System.Data.SqlClient.SqlException:build立与SQL Server的连接时发生networking相关或实例特定的错误。 服务器未find或无法访问。 validation实例名称是否正确,并将SQL Serverconfiguration为允许远程连接。 (提供程序:TCP提供程序,错误:25 – 连接string无效)

SQL Server有一个实例名称:SQLSERVER1 \ APPS。 在Linux服务器上,我可以ping服务器SQLSERVER1和telnet到SQLSERVER1 1372(1372是APPS实例的端口:所以networking连接就在那里。

我可以看到问题发生的唯一空间是.NET Core如何将实例名称转换为端口号。 有谁知道这是如何完成的,是否可以在客户机上configuration?

远程命名实例侦听端口发现依赖于SQL Server Browser Service和协议。 因为你不能利用这个为你的Linux泊坞窗图像,我build议你通过明确指定端口和省略实例名称连接: "server=tcp:SQLSERVER1,1372;database=...;..."

要连接的SQL Server实例的名称或networking地址。 端口号可以在服务器名称后指定: server=tcp:servername, portnumber

顺便说一句,如果你住的实例名称应该没有任何区别后,你明确指定端口。

PS。 在再次阅读这个问题之后,这个问题是相关但是不同的原因。 通常情况下,Linux容器可以发现Windows SQL Server,因为浏览器服务可能已经启动并正在运行(certificate3个版本可行)。 在第四种情况下,这意味着阻碍了发现。 浏览器服务停止,或者浏览器发现协议侦听端口在防火墙(UDP 1433)中被阻塞,或者UDP数据包(或响应!)在容器和服务器之间的某处丢失。 您可以调查并find根本原因, 但是 ,您也可以忽略问题,并通过…明确指定端口来解决问题,就像我所展示的一样。