Ошибка SqlClient после обновления Windows - " входящий поток табличных данных (TDS) удаленный вызов процедуры> (RPC) поток протокола неверен"

С момента обновления Windows 10 до 1803 я начал получать эту ошибку каждый раз, когда я запускаю запрос EF, который присоединяется к табличной функции, которая принимает скалярный параметр.

сообщение: входящий табличный поток данных (TDS) удаленный вызов процедуры (RPC) поток протокола неверен. Параметр 2 ( "" ): тип данных 0x00 неизвестно.

трассировка стека: в системе.Данные.В sqlclient.Свойство sqlcommand.c.b _ _ 180 _ 0(Задача 1 результат) на Система.Нарезка резьбы.Задачи.ContinuationResultTaskFromResulttask`2.InnerInvoke() в системе.Нарезка резьбы.Задачи.Задача.Execute () - - - конец трассировки стека из предыдущее место, где исключение было брошено - - - на Система.Во время выполнения.ExceptionServices.ExceptionDispatchInfo.Throw () at Система.Во время выполнения.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача задача) на Система.Данные.Сущность.Ядро.поставщик EntityClient.Внутренний.EntityCommandDefinition.д__гр.Метод MoveNext()

Я использую Entity Framework v6.2 в проектах .NET 4.6 framework. Я проверил, что тот же код выполняется без проблем на другом компьютере с помощью 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, выполняется запрос. SQL, созданный запросом EF выше, отлично работает в SSMS.

изменить 5/15/2018: я подтверждено, что это специально вызвано .NET Framework 4.7.2. Я manaully установил .NET 4.7.2 на свой компьютер Windows 10 1709, и ошибка снова запустилась.

5 ответов


меня зовут Питер Карлин, и я работаю в команде SQL Server. Сначала я хочу извиниться за этот инцидент и влияние на пользователей .NET Framework 4.7.2. Затем я хочу объяснить, что произошло и как Microsoft исправляет это более подробно.

проблемы связаны с улучшением всегда зашифрованной функциональности в SQL. Эти улучшения расширяют набор операций, которые можно выполнять в Всегда зашифрованном виде, однако они еще не готовы к использованию приложениями. Эти улучшения включают изменения как на стороне SqlClient, так и на стороне SQL server. Мы ввели ошибку в .NET Framework 4.7.2, так что в некоторых случаях (связанных с MARS) SqlClient неправильно считает, что дополнительная функциональность используется и отправляет недопустимые запросы SQL. SQL отклоняет сообщения об ошибках, отображаемые в этом потоке. Это происходит только при подключении к SQL server, который также поддерживает дополнительные функции. SQL DB является первым, чтобы получить последние изменения SQL, и в последнее время развернуть дополнительную функциональность.

наше немедленное исправление состоит в том, чтобы гарантировать, что SQL DB действует так, как будто у него нет дополнительной функциональности, поэтому ошибка sqlclient в 4.7.2 не встречается. Вот почему мы можем исправить проблему с изменением стороны SQL DB.

мы работаем так же быстро, как wise / safe для развертывания, проверки, исправления. На данный момент исправление развернуто примерно на 10% наших производственных мощностей, с ожидаемым завершением к понедельнику 21 мая.


мы исследуем это как возможную регрессию на SqlClient в .NET Framework. Любой, кто может предоставить проект repro, pelase опубликовать его вhttps://github.com/Microsoft/dotnet/issues/749.


Временная Ошибка: Per ChainbridgeTech измените MultipleActiveResultSets с TRUE на FALSE в моей строке подключения, и ошибка остановится.

Это было сообщено и в настоящее время работает. Им все еще нужен репро, и я все еще работаю над изоляцией общих данных, которые я могу опубликовать:

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

дублировать вопрос ошибка TDS ВКЛ SQL-вызовы Azure Entity Framework после обновления Windows 10 апреля 2018


Microsoft активно рассматривает эту проблему. Основываясь на том, что мы знаем до сих пор, проблема связана с .NET framework 4.7.2 с MARS (несколько активных результирующих наборов) при использовании async/await.

известные обходные пути включают откат обновления Windows / .NET framework, не используя MARS или не используя async/await.

Если у вас есть дополнительная информация, которая может помочь нам сузить его, пожалуйста, добавьте в отчет о проблеме на https://github.com/Microsoft/dotnet/issues/749


решением для меня было преобразовать запрос, который умирал от использования .Включают в себя .IncludeOptimized и теперь работает.