尝试执行此wcf代码时出现错误
ExceptionDetail,可能由IncludeExceptionDetailInFaults = true创建,其值为: System.InvalidOperationException:在对WSDL导出扩展的调用中抛出异常:System.ServiceModel.Description.DataContractSerializerOperationBehavior 合同:http://tempuri.org/:IService1 ----> System.Runtime.Serialization.InvalidDataContractException:方法'MyClassLibrary.MyDataTable.GetSchema()'必须返回具有有效Id的模式。 在System.Runtime.Serialization.SchemaExporter.InvokeGetSchemaMethod(键入clrType,XmlSchemaSet架构,XmlQualifiedName stableName) 在System.Runtime.Serialization.SchemaExporter.ExportXmlDataContract(XmlDataContract dataContract) 在System.Runtime.Serialization.SchemaExporter.ExportDataContract(DataContract dataContract) 在System.Runtime.Serialization.SchemaExporter.Export() 在System.Runtime.Serialization.XsdDataContractExporter.Export() 在System.Runtime.Serialization.XsdDataContractExporter.Export(Type type) at System.ServiceModel.Description.MessageContractExporter.ExportType(Type type,String partName,String operationName,XmlSchemaType& xsdType) 在System.ServiceModel.Description.DataContractSerializerMessageContractExporter.ExportBody(Int32 messageIndex,Object state) 在System.ServiceModel.Description.MessageContractExporter.ExportMessage(Int32 messageIndex,Object state) .... ... ....
自定义数据表
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
注意:当只使用数据表时它可以,但不是我的自定义数据表。
需要添加什么?我可以序列化我的自定义数据表。 我能够序列化我的其他对象而不是这个类。
答案 0 :(得分:0)
我不是手动从DataTable
派生,而是使用Visual Studio的数据集设计器创建一个类型化的数据集。它们更容易使用。
答案 1 :(得分:0)
DataTable中GetSchema方法的实现类似于
protected virtual XmlSchema GetSchema()
{
if (this.GetType() == typeof (DataTable))
return (XmlSchema) null;
这样你就可以用以下方式覆盖这个方法
protected override XmlSchema GetSchema()
{
return null;
}
这将解决序列化问题。