Ошибка SqlClient после обновления Windows - «Неверный поток протокола удаленного вызова процедур (RPC) потока входящих табличных данных (TDS)» - PullRequest
0 голосов
/ 15 мая 2018

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

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

Трассировка стека: в System.Data.SqlClient.SqlCommand. <> C.b__180_0 (результат Task1) в System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke () в System.Threading.Tasks.Task.Execute () --- Конец трассировки стека из предыдущего расположения, в котором было сгенерировано исключение --- в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) в System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.d__c.MoveNext ()

. Я использую Entity Framework 4.66 в версии 4.66.рамочные проекты.Я проверил, что тот же код выполняется без проблем на другом компьютере с использованием 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.

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

Ответы [ 5 ]

0 голосов
/ 20 мая 2018

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

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

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

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

0 голосов
/ 18 мая 2018

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

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

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

0 голосов
/ 16 мая 2018

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

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

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

Повторяющаяся проблема Ошибка TDS в вызовах SQL Azure Entity Framework после Windows 10 апреля 2018 г. Обновление

0 голосов
/ 18 мая 2018

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

0 голосов
/ 15 мая 2018

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

...