2010-09-17 160 views
0

我有一个客户端,它执行一些sql并以DataSet的形式获取结果。这个DataSet被放入一个名为“ExecutionResults”的对象中,其中一个名为“Data”的属性包含了这个DataSet。我希望通过调用WCF Web服务方法“SavePackageExecutionResults(ExecutionResults结果)”并通过服务将ExecutionResults的“Data”属性反序列化为DataSet来发送此“ExecutionResults”对象。WCF - 已知类型与客户端和服务器之间的共享类类型

我正在创建客户端和服务。有两种方法我知道我可以将服务将ExecutionResults的“Data”属性反序列化为DataSet。一种方法是在库中引用客户端中的ExecutionResults,然后在生成代理时使用相同的ExecutionResults类型。另一种方法是不引用包含“ExecutionResults”的库,并让代理将创建自己的ExecutionResults类来实现IExtensibleDataObject。然后,我可以用[KnownType(typeof(DataSet))]标记这个类,以便获得将“Data”属性反序列化为DataSet的服务。

什么是正确的方式来完成我想要做的?在我看来,我上面提到的两种方式都涉及客户端和服务之间的一些共享类型知识。也就是说,在这两种情况下,我强制该服务知道一个System.Data.DataSet。我上面提到的情景之一是不是比其他的“邪恶”?

回答

2

查看DataSetSurrogate类: http://support.microsoft.com/kb/829740 它是专门为DataSet序列化设计的。

DataSetSurrogate类用作 包装类要遥控器, 任何数据集。服务器 组件将您想要的数据集传递给DataSetSurrogate 构造函数,然后将 DataSetSurrogate类传递回 客户端。在客户端,DataSetSurrogate.ConvertToDataSet 方法用于从DataSetSurrogate类中提取DataSet 。

+0

WCF默认使用的DataContractSerializer似乎没有任何序列化DataSet的困难。 – SideFX 2010-09-20 14:09:50

+2

序列化的DataSetSurrogate的大小可能比序列化的DataSet小很多。 – flayn 2010-09-21 07:45:26

相关问题