.NET Core 7 WinForms连接MS SQL Server时远程主机强制关闭连接问题
解决方案:.NET Core 7 WinForms + EF7 连接SQL Server 2012在Windows Server 2016报错
核心原因
问题源于.NET Core 7使用的Microsoft.Data.SqlClient与Windows Server 2016的TLS配置、SQL Server 2012的加密支持不匹配,而.NET Framework程序依赖的System.Data.SqlClient默认行为更兼容旧环境。
具体解决步骤
强制应用使用TLS 1.2
在WinForms程序入口(Program.cs)的应用初始化前添加代码,指定TLS版本以避免.NET Core默认高版本TLS与SQL Server不兼容:System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; ApplicationConfiguration.Initialize(); Application.Run(new MainForm());配置SQL Server 2012的TLS 1.2支持
SQL Server 2012 SP3(你的版本11.0.7507.2属于此版本)支持TLS 1.2,但默认可能未启用,需通过注册表配置:- 打开注册表编辑器,定位到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server - 将
EnabledDWORD值设为1,DisabledByDefault设为0 - 同样设置
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client的对应值 - 重启SQL Server服务
- 打开注册表编辑器,定位到
调整连接字符串配置
使用明确的加密规则并信任服务器证书,避免证书验证失败导致连接被强制关闭:Server=你的服务器地址;Database=你的数据库名;User ID=用户名;Password=密码;Encrypt=True;TrustServerCertificate=True;降级SQL客户端版本(可选)
若上述方法无效,尝试将Microsoft.EntityFrameworkCore.SqlServer包版本降至6.x,EF6对旧SQL Server的兼容性更好,且仍支持.NET Core 7。
内容的提问来源于stack exchange,提问作者MorglenRazor
相关产品推荐
相关产品推荐

