LINQPad 6连接本地Docker部署的SQL Server 2019报预登录握手错误,SSMS可正常连接
连接异常排查与解决步骤
问题根因定位
报错原文:已成功与服务器建立连接,但随后在预登录握手过程中发生错误(提供程序SSL错误0 - 等待操作超时)
TCP链路可正常建立但SSL预登录握手超时,且SSMS可正常连接的前提下,说明数据库服务、端口映射、账号鉴权配置均无问题,异常集中在LINQPad客户端与SQL Server 2019 docker实例的TLS协商流程。
具体排查操作
- 调整连接加密参数
- 打开LINQPad 6对应连接的高级设置,将默认启用的
Encrypt属性从True改为False,同时将TrustServerCertificate设置为True,跳过服务端证书校验与强制加密流程。 - 若默认连接超时过短,在自定义连接串末尾追加
Connection Timeout=30参数,延长握手等待时间。
- 打开LINQPad 6对应连接的高级设置,将默认启用的
- 修复驱动版本兼容问题
- LINQPad 6内置的旧版本
Microsoft.Data.SqlClient与SQL Server 2019默认启用的TLS 1.2协议存在握手兼容缺陷,可通过LINQPad的程序集管理模块,手动加载最新正式版Microsoft.Data.SqlClient程序集替换内置驱动,再重试连接。
- LINQPad 6内置的旧版本
- 匹配docker端TLS配置
- 进入SQL Server 2019运行的docker容器,执行配置命令开启多TLS版本兼容:
/opt/mssql/bin/mssql-conf set network.tlsprotocols "TLS_1_0,TLS_1_1,TLS_1_2",配置完成后重启容器实例。 - 临时关闭本地第三方安全软件的网络拦截规则,排除安全软件拦截回环端口SSL握手数据包导致的超时问题。
- 进入SQL Server 2019运行的docker容器,执行配置命令开启多TLS版本兼容:
- 配置对齐校验
- 核对LINQPad连接的服务器地址、端口号与SSMS可正常连接的配置完全一致,排除端口映射偏差。
- 参考SSMS的有效连接加密配置,完全对齐LINQPad的高级参数后重试。
内容的提问来源于stack exchange,提问作者beewest
相关产品推荐
相关产品推荐

