【问题标题】:Why is it a bad practice to return DataTables from WCF service operations?为什么从 WCF 服务操作返回 DataTables 是一种不好的做法?
【发布时间】:2012-04-10 09:13:13
【问题描述】:

我知道在 WCF 中序列化复杂类型的首选方法是使用 DataContracts,但为什么会这样?

如果我从服务操作返回 DataTable 而不是 DataContract,WCF 是否使用 XmlSerializer 类而不是默认的 DataContractSerializer?

最后,在这个主题中:DataTable not accepted by svcutil - WCF Service

您是否认为问题在于通过返回 DataTable,CLR 类型没有正确映射到 XSD 架构定义?

【问题讨论】:

    标签: wcf


    【解决方案1】:

    在服务合同中使用 DataTable 的主要问题不是技术问题,而是设计问题。如果您的服务在契约中使用 DataTable,那么您就违反了使用标准化契约和松散耦合的 SOA 设计原则。
    这是因为如果服务返回 DataTable,则合同不会指定 DataTable 包含哪些列。这将迫使服务消费者对服务提供者的内部运作有一定的了解,从而使系统紧密耦合。

    【讨论】:

    • 所以这一切都与互操作性有关。考虑到我的服务客户端都是 .NET 4,我浪费了几个小时编写 DataContract 而不是返回包含 50 多列的 DataTable :)
    • @Pantelis 这不仅仅是关于互操作性。正如 GTG 已经指出的那样,数据契约没有很好地定义:如果列发生变化,客户端可能会因为这些变化而中断,而数据契约将保持不变。强类型数据集解决了这个问题,理论上可能是 Intranet 应用程序的可行解决方案,尽管我真的不需要在这种情况下使用它们,所以我不能说它在实践中的效果如何(另见 @987654321 @)
    • 是的,我昨天读过这篇文章。说得通。好吧,如果你不实现 IExtensibleDataObject,一个写得不好的 DataContract 也可能会破坏现有的客户端。但是,是的,我明白了!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    • 2014-06-16
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    相关资源
    最近更新 更多