.NET 4.8控制台应用连接Azure SQL托管实例失败求助
Azure SQL托管实例公共端点连接超时问题排查与解决
关键排查与修复步骤
验证端点地址与端口
确认连接字符串中的服务器FQDN完全匹配Azure门户中SQL托管实例的公共端点地址,端口必须为3342,不可有误。测试网络连通性
用PowerShell命令测试端口是否可达:Test-NetConnection mymi.public.XXXX.database.windows.net -Port 3342若测试失败,排查以下网络环节:
- 本地防火墙/杀毒软件是否放行3342端口的出站流量
- SQL托管实例所在VNet的NSG入站规则是否正确配置:源IP为本地机器公网IP,端口3342,协议TCP,动作设为允许
- 企业级防火墙或代理是否拦截了该端口流量
适配.NET 4.8的AD集成认证
若使用Microsoft.Data.SqlClient,需注意:- 安装4.0及以上版本的
Microsoft.Data.SqlClientNuGet包(适配.NET Framework) - 连接字符串中
Authentication参数不要加单引号,修正为:Authentication=Active Directory Integrated - 若本地机器未加入Azure AD域,改用
Active Directory Password认证,连接字符串示例:Server=tcp:mymi.public.XXXX.database.windows.net,3342;Encrypt=True;TrustServerCertificate=False;Authentication=Active Directory Password;User ID=你的AAD账号@域名.com;Password=你的密码
- 安装4.0及以上版本的
强制启用TLS 1.2
.NET 4.8默认可能使用旧版TLS,而Azure SQL托管实例要求TLS 1.2及以上,需在代码开头添加:System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
优化后的示例代码
using System; using Microsoft.Data.SqlClient; namespace MyConsoleApp { public class Program { public static void Main() { // 强制使用TLS 1.2 System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; var connectionString = @"Server=tcp:mymi.public.XXXX.database.windows.net,3342;Persist Security Info=False;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Authentication=Active Directory Integrated;"; using (var conn = new SqlConnection(connectionString)) { try { conn.Open(); Console.WriteLine("连接成功!"); Console.WriteLine(conn.ConnectionString); } catch (Exception ex) { Console.WriteLine($"连接失败:{ex.Message}"); if (ex.InnerException != null) Console.WriteLine($"错误详情:{ex.InnerException.Message}"); } } } } }
内容的提问来源于stack exchange,提问作者Lucky
相关产品推荐
相关产品推荐

