sql-server - Linux 上的 .NET Core 如何确定 SQL Server 实例监听的端口?

标签 sql-server docker asp.net-core .net-core

我有一个 ASP.NET Core 1.1 Web API,它在 Ubuntu 上的 Docker 容器中运行,并连接到 Windows 服务器上的 SQL Server 数据库(SQL Server 2012 SP3)。这适用于 4 个环境中的 3 个,但在一个环境中它无法连接到 SQL Server,我正在尝试对其进行故障排除。

错误是:

Unhandled Exception: 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: TCP Provider, error: 25 - Connection string is not valid)



SQL Server 有一个实例名称:SQLSERVER1\APPS。从 Linux 服务器我可以 ping 服务器 SQLSERVER1 和 telnet 到 SQLSERVER1 1372(1372 是 APPS 实例的端口:所以网络连接是存在的。

我能看到的唯一问题是 .NET Core 如何将实例名称转换为端口号。有谁知道这是如何完成的以及它是否可以在客户端机器上配置?

最佳答案

远程命名实例监听端口发现依赖 SQL Server Browser Service和协议(protocol)。由于您无法将其用于您的 Linux docker 镜像,我建议您通过显式指定端口并省略实例名称来连接: "server=tcp:SQLSERVER1,1372;database=...;..." :

The name or network address of the instance of SQL Server to which to connect. The port number can be specified after the server name: server=tcp:servername, portnumber



顺便说一句,如果您使用实例名称,那么在您明确指定端口后应该没有任何区别。

PS。再次阅读问题后,问题是相关但不同的原因。通常,Linux 容器可以发现 Windows SQL Server,因为浏览器服务可能已启动并正在运行(证明 3 个环境。它可以工作)。在第 4 种环境中,这意味着某些东西阻碍了发现。浏览器服务已停止,或者浏览器发现协议(protocol)监听端口在 FW 中被阻止(UDP 1433),或者 UDP 数据包(或响应!)可能在容器和服务器之间的某处丢失。您可以调查并找到根本原因,但是,您也可以忽略问题并通过...明确指定端口来解决问题,就像我展示的那样。

关于sql-server - Linux 上的 .NET Core 如何确定 SQL Server 实例监听的端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44328977/

相关文章:

mysql - 如何导出/保存整个 Docker 容器/镜像

asp.net - 在 Azure 上持续部署 ASP.NET 5 Beta 7

xamarin - ASP.NET Core Web API 与 ASP.NET Core 应用程序

sql - 在 SQL Server 中将字符串拆分为给定行分隔符和列分隔符的表

docker - 如何使用 Docker 卷作为 Mesos/Marathon 的持久卷?

docker - docker-compose up vs docker-compose up service1 service2

c# - 使用 Twilio .netcore Blazor 服务器端发送短信通知

sql-server - 需要确保字符串之间有一个连字符

sql-server - Sql where 子句在过滤器为空的情况下返回所有内容

sql-server - 当 DataTypeCompatility 打开时,如何将 12/30/1899 参数化为 SQL Server native 客户端?