2012-04-10 53 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

相关问题