ASP.NET Core 2.0.8间歇性TDS协议错误需重启IIS求解决方案
问题:ASP.NET Core 2.0.8 应用间歇性出现TDS协议MARS头错误
环境与配置
- ASP.NET Core 版本:2.0.8
- 操作系统:Windows Server 2016
- IIS 版本:10
- SQL Server:Microsoft SQL Server 2014
- 连接字符串配置:
MultipleActiveResultSets=False;
错误现象
应用此前运行稳定,现所有API间歇性返回错误,错误信息如下:
{ "errors": [ "The incoming tabular data stream (TDS) protocol stream is incorrect. The MARS TDS header contained errors." ] }
错误仅能通过重启IIS临时解决,发作无规律,难以预判。
已尝试的排查与操作
- 检查SQL Server配置,确认客户端MARS已启用
- 切换连接字符串中
MultipleActiveResultSets的True/False取值 - 全面检查业务代码逻辑
- 排查API内存泄漏问题
上述操作均未解决间歇性错误问题。
建议排查方向与解决方案
1. 检查并更新SQL Server驱动版本
ASP.NET Core 2.0.8默认使用的System.Data.SqlClient或Microsoft.Data.SqlClient可能存在与SQL Server 2014兼容的MARS相关bug:
- 更新至对应驱动的.NET Core 2.0适配稳定版本
- 若当前用
System.Data.SqlClient,可尝试切换为Microsoft.Data.SqlClient(注意适配连接字符串配置)
2. 排查数据库连接池复用问题
间歇性错误大概率和连接池中的脏连接有关:
- 在连接字符串中添加
Max Pool Size=100;Pooling=true;Connection Reset=true;,强制连接回收时重置状态 - 全面检查代码,确保所有
SqlConnection、SqlDataReader等资源都用using块包裹,避免资源泄漏导致连接池异常
3. 调整IIS应用程序池配置
- 关闭应用程序池的快速失败保护:打开IIS管理器→对应应用程序池→高级设置→快速失败保护→禁用
- 检查应用程序池回收策略:避免在业务高峰时段触发定期回收,或调整内存回收阈值,防止因回收导致连接池状态紊乱
4. 捕获更详细的错误上下文
- 在
appsettings.json中设置日志级别为Debug,捕获数据库操作的完整调用栈 - 用SQL Server的Extended Events或SQL Server Profiler跟踪TDS错误发生时的连接请求细节,定位具体触发场景
5. 安装SQL Server补丁
SQL Server 2014存在多个TDS协议、MARS相关的修复补丁:
- 安装SQL Server 2014 Service Pack 3(SP3)及后续累积更新,修复已知的协议兼容问题
内容的提问来源于stack exchange,提问作者Ata ur Rehman
相关产品推荐
相关产品推荐

