首页 文章

托管WCF服务中的DataContractException

提问于
浏览
0

我正在尝试托管服务,其中有一个方法返回以下类型:

[DataContract]
[Obfuscation(ApplyToMembers = true, Exclude = true)]
[Serializable]
public class Output
{
    [DataMember]
    public DataSet dsOutput{get;set;}
}

方法签名如下:

[OperationContract]
[WebGet]
function Output matchData(DataSet pDSSide1,DataSet pDSSide2)
{
   return new Output();
}

在浏览服务时,我遇到以下异常:

System.InvalidOperationException:在对WSDL导出扩展的调用中抛出异常:System.ServiceModel.Description.DataContractSerializerOperationBehavior contract:http://tempuri.org/:TesterTool ----> System.Runtime.Serialization.InvalidDataContractException:类型'System.Data.DataRow'无法序列化 . 请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员 . 如果类型是集合,请考虑使用CollectionDataContractAttribute对其进行标记 . 有关其他受支持的类型,请参阅Microsoft .NET Framework文档 . `

有什么建议 .

1 回答

  • 1

    通过服务发送DataTable不是一个好习惯 .

    正如govindaraj here所述:

    最好的方法是使用自定义对象的自定义集合 . 如果您使用的是2.0,则可以使用泛型集合而不是自定义集合来减少代码 . 怎么样?创建一个自定义数据对象(仅包含每个字段的私有字段和公共属性),类似于数据表中的每一行 . 创建一个图层,该图层将对所有数据库(在本例中为数据集)进行访问并转换为自定义对象 . 所有客户端代码都将访问该层 .

相关问题