ContractException при сериализации моих пользовательских данных - PullRequest
0 голосов
/ 27 мая 2011

Я получил сообщение об ошибке при попытке выполнить этот код wcf

ExceptionDetail, вероятно, созданный IncludeExceptionDetailInFaults = true, значение которого: System.InvalidOperationException: в вызове экспорта WSDL возникло исключениерасширение: System.ServiceModel.Description.DataContractSerializerOperationBehavior contract: http://tempuri.org/:IService1 ----> System.Runtime.Serialization.InvalidDataContractException: Метод 'MyClassLibrary.MyDataTable.GetSchema ()' должен возвращать схему с действительным Id.в System.Runtime.Serialization.SchemaExporter.InvokeGetSchemaMethod (тип схемы clrType, XmlSchemaSet, XmlQualifiedName stableName) в System.Runtime.Serialization.SchemaExExorter (Экспорт..Runtime.Serialization.SchemaExporter.Export () в System.Runtime.Serialization.XsdDataContractExporter.Export () в System.Runtime.Serialization.XsdDataContractExporter.Export (тип type) в System.ServiceModel.Description.MessageContportyportExpepepString partName, String operationName, XmlSchemaType & xsdType) в System.ServiceModel.Description.DataContractSerializerMessageContractExporter.ExportBody (Int32 messageIndex, состояние объекта) в System.ServiceModel.Description.MessageContractExagex_Export.Export.Export.Export.Export.Export.Export.Export.Exp.....

Пользовательские данные

Public Class MyDataTable
    Inherits DataTable

    Public Sub New()
    End Sub

 End Class

Мой интерфейс WCF

 <ServiceContract()> _
 Public Interface IService1
   <OperationContract()> _
   Function TestDatatable(ByVal MyDT As MyDataTable) As Boolean
End Interface

Реализация

Public Class Service1
  Implements IService1

    Public Function TestDatatable(ByVal MyDT As MyClassLibrary.MyDataTable) As Boolean Implements IService1.TestDatatable

          Return MyDT.TableName = "MyTable"

     End Function
End Class

Примечание. Когда используется только datatable, это нормально, но не мой настраиваемый тип данных.

Что нужно добавить, я могу сериализовать свой настраиваемый тип данных.Я могу сериализовать свой другой объект, но не этот класс.

Ответы [ 2 ]

0 голосов
/ 06 октября 2017

Реализация метода GetSchema в DataTable выглядит следующим образом:

protected virtual XmlSchema GetSchema()
    {
      if (this.GetType() == typeof (DataTable))
        return (XmlSchema) null;

Так что вы можете переопределить этот метод следующим образом

protected override XmlSchema GetSchema()
{
    return null;
}

Это решит проблему сериализации.

0 голосов
/ 27 мая 2011

Вместо того, чтобы вручную выводить из DataTable, я бы создал типизированный набор данных, используя конструктор наборов данных Visual Studio.С ними гораздо проще работать.

...