【问题标题】:datacontract attribute is required in WCF?WCF 中需要 datacontract 属性吗?
【发布时间】:2012-06-29 10:11:00
【问题描述】:

WCF 中的 DataContract 属性是必需的吗?

我有一个没有用 DataContract 标记的类或没有用 DataMember 标记的属性。

当我在 4 台服务器上部署 wcf 服务时,out 4 服务在 3 台服务器上运行良好,但在 1 台服务器上失败并显示消息“无法序列化类型‘类’。考虑使用 DataContractAttribute 属性对其进行标记,并标记其所有成员您想使用 DataMemberAttribute 属性进行序列化。”

那么在 web.config 或 machine.config 或 IIS 中是否有任何设置可以让我强制在代码中使用序列化程序? 或

如果没有指定属性,我可以指定使用默认序列化程序吗?

谢谢, 克里希纳

【问题讨论】:

    标签: .net wcf wcf-data-services wcf-binding


    【解决方案1】:

    不,不需要 DataContractAttribute - WCF 将推断序列化规则。我能想到的唯一要检查的是 .NET 的版本在您的所有服务器上都是相同的。

    更多信息:WCF Data Contract / Serialization

    【讨论】:

      【解决方案2】:

      如 MSDN 所述

      [DataContractAttribute] 指定该类型定义或实现数据协定并且可由序列化程序序列化,例如 DataContractSerializer。为了使他们的类型可序列化,类型作者必须为其类型定义数据协定

      您必须使用 DataContractDataMember 属性来装饰您的类,以便在 WCF 服务中使用。

      【讨论】:

      • 我很惊讶为什么它在 3 台服务器上运行而不是在 1 台服务器上运行,即使我没有为该单个类添加 DataContract 属性
      【解决方案3】:

      是的,将需要在 WCF 服务和任何客户端之间发送的所有类的 [DataContract] 属性。

      该类的所有可能包含您要发送的数据的属性都需要使用[DataMember] 属性进行标记。这使得定义一个包含可序列化和不可序列化数据的类成为可能——但我不推荐它。

      请注意,您只能序列化数据成员,例如public 字段或属性,但您不能序列化方法。因此,我的建议是使用普通类,这些类除了包含要在服务和客户端之间作为数据合同进行通信的数据之外什么都不做。

      【讨论】:

      • 我知道你提到了什么,但我很惊讶为什么它在 3 台服务器上运行而不是在 1 台服务器上运行,即使我没有为单个类添加 DataContract 属性
      • 不,你不需要所有类的属性;如果您在服务合同中使用它,WCF 会假定您希望它成为数据合同。
      猜你喜欢
      • 2011-08-20
      • 2011-02-04
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      相关资源
      最近更新 更多