【问题标题】:IEnumerable Collection Gets Cleared upon WCF TransferIEnumerable 集合在 WCF 传输时被清除
【发布时间】:2012-12-22 06:43:38
【问题描述】:

我有一个类(比如 CustomClass),它几乎没有 IEnumerable<Enum> 类型的属性。

CustomClass 的对象传递给WCF 并返回Result 类型的对象(不同类型)。

如果我在 WCF 中检查 CustomClass 参数,然后在 WCF 完成所有操作并将响应发送回客户端后,CustomClass 参数具有该值,但当响应到达客户端时,CustomClass 的对象清除该 List 属性的所有内容。

我只是想知道,为什么?

Custom 类的结构是

 public class QuerySearchCriteria 
 {       
    [DataMember]
    public string DScope { get; set; }

    [DataMember]
    public IEnumerable<SOURCE> Sources { get; set; }

    [DataMember]
    public IEnumerable<ETYPE> ETypes { get; set; }

    [DataMember]
    public IEnumerable<Score> Score{ get; set; }       
}

一切正常,但Score 属性中的项目被删除。

【问题讨论】:

  • 我猜 WCF 是*戴上太阳镜* 保持得分...YYYYYEEEEAAAAHHHHHH
  • 是否有多个客户端/服务器实例?
  • Score(s) 属性的具体类型(GetType())是什么?

标签: c# wcf collections ienumerable


【解决方案1】:

只是根据您提供的信息进行猜测,但 Score 是可序列化的类吗?在 WCF 中,会自动包含枚举,因为它们被标记为 Serializable除非您已手动将 Enum 类型类标记为 DataContract。在这种情况下,您需要将 Enum 的每个成员标记为 EnumMember。这个SO question and answer 很好地解释了它是如何工作的。

如果我猜错了 :) 那么您应该启用WCF tracing 并发布该服务正在创建的soap,以获取有关正在发生的事情的更多详细信息。此外,发布 Score 类的源代码会有所帮助。

【讨论】:

  • 我正在按照您的建议使用 WCF 跟踪对其进行测试。同时,Score 不是一个类,它是一个枚举。
猜你喜欢
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 1970-01-01
  • 2012-12-18
相关资源
最近更新 更多