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根本原因, 但是 ,您也可以忽略问题,并通过…明确指定端口来解决问题,就像我所展示的一样。
- 保持Dotnet Core Grpc Server作为控制台应用程序运行?
- Dotnet核心Docker应用挂在Synology版本上
- 为什么这个dotnettesting只在Docker容器中运行崩溃?
- 什么会阻止在Docker容器中运行的代码连接到单独的服务器上的数据库?
- .Net Core Clrdebugging器VSDBG在Windows Docker容器中连接到远程进程时暂停应用程序
- 在Azure中的Docker中,一个带有swagger的asp.net核心Web API不起作用
- 无论使用ITicketStore还是IDistributedCache,重新启动服务器时,身份validationCookie都会停止工作
- 部署.NET Core 1.1应用程序到Docker – 无法parsingCoreCLRpath
- .net-core自包含发布的问题