2010-09-17 162 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

相關問題