2012-04-10 55 views
2

我知道在WCF中序列化複雜類型的首選方法是使用DataContracts,但它爲什麼如此呢?爲什麼從WCF服務操作中返回DataTables是不好的做法?

如果我從服務操作返回一個數據表,而不是一個DataContract的不WCF使用,而不是默認的DataContractSerializer XmlSerializer類?

最後,在本主題:DataTable not accepted by svcutil - WCF Service

你覺得現在的問題是,通過返回的DataTable的CLR類型不正確映射到XSD架構定義?

回答

6

與您的服務合同使用的DataTable的主要問題不是技術問題,而是一個設計問題。如果您的服務在合同中使用DataTable,那麼您違反了使用標準化合同和鬆散耦合的SOA設計原則。
這是因爲如果一個服務返回DataTable,合同沒有指定DataTable包含哪些列。這將迫使服務消費者對服務提供商的內部運作有一些瞭解,使系統緊密耦合。

+0

所以它是所有關於互操作性。考慮到我的服務的客戶都是.NET 4中,我失去了幾個小時寫DataContract,而不是50分+列:) – Pantelis 2012-04-10 11:26:48

+0

@Pantelis它是不是所有的互操作性返回一個DataTable。正如GTG已經指出的那樣,數據合同的定義並不明確:如果列更改,客戶端可能會由於這些更改而中斷,而數據合同將保持不變。強類型的數據集解決了這個問題,理論上可能是內聯網應用的可行解決方案,但我並不需要在這種情況下使用它們,所以我不能說它在實際中的效果如何(另請參見[this老帖](http://www.hanselman.com/blog/PermaLink,guid,d88f7539-10d8-4697-8c6e-1badb08bb3f5.aspx)) – 2012-04-10 13:44:24

+0

是啊,我看到這篇文章昨天。說得通。那麼,DataContract寫得不好,如果你沒有實現IExtensibleDataObject,也可能會破壞現有的客戶端。但是,是的,我明白了!謝謝。 – Pantelis 2012-04-11 07:48:16

相關問題