При возврате типизированного DataSet из службы WCF результат «xs: string» не найден - PullRequest
3 голосов
/ 15 марта 2011

Учитывая сервер, который предоставляет сервис через WCF. Один из OperationContract возвращает типизированный набор данных с именем TraceDataSet, который содержит снимок трассировки на сервере.

Когда возвращается набор данных, ReadXml, который находится внутри файла, сгенерированного пользовательским инструментом Visual Studio, в методе ReadXmlSerializable выдает

Неопределенный тип данных: 'xs: string'.

Я добавил трассировку WCF на клиенте и сервере, но связь WCF работает отлично.

Я провел некоторое исследование, но нет ничего окончательного, и я также получаю 404 ошибки с форумов MSDN.

Я проверил поток за XmlReader, и он содержит объявление пространства имен xmlns:xs, так что я немного запутался.

Если я сериализирую DataSet в файл на сервере (который запускается локально для целей отладки) и читаю этот файл с клиента, он работает, поэтому я подозреваю, что что-то происходит через связь WCF, даже если это не подводит.

Типизированный DataSet объявлен в общей сборке, на которую ссылаются как клиент, так и сервер. Мы не используем восстановленный DataSet, созданный прокси в папке / References.

До недавнего времени у нас никогда не было проблем с трассировкой, и, к сожалению, мы не можем указать на изменение, которое привело к поломке этой функции.

Кто-нибудь знает, почему ReadXml не может найти тип данных xs:string?

Ответы [ 4 ]

0 голосов
/ 18 июня 2015

У меня была такая же проблема. Проблема заключалась в том, что некоторые таблицы в DataSet имели свойство столбца DataType , установленное на тип Object. Этот тип не сериализуем.

Проверьте значение свойства DataType , если оно сериализуемо, во всех столбцах всех таблиц. Если нет, измените его на сериализуемый тип или удалите эти столбцы. Это должно решить проблему.

0 голосов
/ 24 августа 2011

Я ищу на форумах и других сайтах, я обнаружил, что, похоже, это ошибка в сериализации в некоторых случаях в System.Data. Я не знаю, как исправить эту ошибку, но я нашел работу arround:

Поместите набор данных в строку (с getXml () в traceData) и отправьте его клиенту. Клиент получил строку и перестроил набор данных. Это не исправление, но это обходной путь, и он работает для меня.

0 голосов
/ 10 декабря 2014

Я столкнулся с той же ошибкой при использовании оператора SQL, который не привел к определенному типу данных, например:

SELECT SERVERPROPERTY('ComputerNamePhysicalNetBIOS') AS CurrentMachineName

Я изменил запрос SQL вместо того, чтобы указать тип данных, который я хотел, например:

SELECT CAST(SERVERPROPERTY('ComputerNamePhysicalNetBIOS') AS varchar(255)) AS CurrentMachineName

и это исправило проблему. Теперь для набора данных был задан конкретный тип данных, а не универсальный «anytype», который был переведен в XML как xs: string.

0 голосов
/ 15 марта 2011

Я могу ошибаться, но я не думаю, что WCF поддерживает DataSets. Всякий раз, когда я использую WCF, я использую только классы POCO. Я думаю, вы хотите скопировать данные в класс Trace, а затем вернуть массив объектов Trace.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...