更新Windows后的SqlClient错误 - "传入的表格数据流(TDS)远程过程调用> (RPC)协议流不正确"

时间:2018-05-14 23:11:56

标签: sql-server azure-sql-database sqlclient .net-4.7.2

自从将Windows 10更新到1803以来,我已经开始接收此错误,只要我运行一个EF查询,该查询连接一个带有标量参数的表值函数。

  

消息:传入的表格数据流(TDS)远程过程调用   (RPC)协议流不正确。参数2(""):数据类型0x00   不明。

     

Stack Trace:在System.Data.SqlClient.SqlCommand。<> c.b__180_0(Task1   结果)在   System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()   在System.Threading.Tasks.Task.Execute()---堆栈跟踪结束   抛出异常的先前位置--- at   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.d__c.MoveNext()

我在.NET 4.6框架项目中使用Entity Framework v6.2。我验证了相同的代码在使用Windows 10 1709的另一台计算机上执行没有问题。我将计算机更新到Windows 10 1803而没有其他更改,我开始收到上述错误。导致错误的代码:

var query = from fs in db.ViewWithInformation
            join e in db.GetEventsForPerson(personnelId) on fs.Event_Id equals e.Event_Id
            where !fs.Is_Deleted
            select fs;
return await query.ToArrayAsync();

如果我删除了针对db.GetEventsForPerson的连接,则运行查询。上面的EF查询生成的SQL在SSMS中运行良好。

编辑5/15/2018:我确认这是由.NET Framework 4.7.2特别引起的。我在我的Windows 10 1709计算机上手动安装了.NET 4.7.2,错误再次启动。

5 个答案:

答案 0 :(得分:5)

我的名字是Peter Carlin,我在SQL Server团队工作。我首先要为此事件及其对.NET Framework 4.7.2用户的影响道歉。我接下来想要解释发生了什么以及微软如何更详细地修复它。

问题是由于SQL中的Always Encrypted功能的改进。这些改进扩展了可以在Always Encrypted中完成的操作集,但是它们尚未准备好供应用程序使用。这些改进涉及对SqlClient和SQL服务器端的更改。我们在.NET Framework 4.7.2中引入了一个错误,在某些情况下(与MARS相关),SqlClient错误地认为添加的功能正在使用中,并向SQL发送无效请求。 SQL拒绝那些在此线程中看到错误消息的人。只有在连接到支持添加功能的SQL服务器时才会发生这种情况。 SQL DB是第一个获得最新SQL更改的,最近部署了添加的功能。

我们的直接解决方法是确保SQL DB的行为就像它没有添加的功能一样,因此不会遇到4.7.2中的SqlClient端错误。这就是我们能够通过SQL DB端更改解决问题的原因。

我们正在以明智/安全的方式快速部署,验证和修复。此时,修复程序部署到我们生产能力的大约10%,预计在5月21日星期一之前完成。

答案 1 :(得分:2)

我们正在研究这是对.NET Framework上SqlClient的可能回归。任何可以提供repro项目的人,pelase在https://github.com/Microsoft/dotnet/issues/749发布。

答案 2 :(得分:2)

Temp解决方法:每 ChainbridgeTech 在我的连接字符串中将MultipleActiveResultSets从TRUE更改为FALSE,错误就会停止。

这已被报道并正在进行中。他们仍然需要一个repro,我仍然在努力隔离我可以公开的可共享数据:

https://github.com/Microsoft/dotnet/issues/749

重复问题TDS Error on Azure Entity Framework SQL Calls after Windows 10 April 2018 Update

答案 3 :(得分:1)

Microsoft正在积极研究此问题。根据我们目前所知,当使用async / await时,该问题与带有MARS(多个活动结果集)的.NET框架4.7.2有关。

已知的解决方法包括回滚Windows / .NET框架更新,而不是使用MARS或不使用async / await。

如果您有其他信息可以帮助我们缩小范围,请在https://github.com/Microsoft/dotnet/issues/749

添加问题报告

答案 4 :(得分:0)

我的解决方案是将使用.Include的查询转换为.IncludeOptimized,现在可以正常工作。