关于c#:WCF是否需要DataContract属性

Is DataContract attributes required for WCF

我在写WCF服务和他的客户。我想在服务和客户机之间发送/接收自定义类的对象。

我有三个模块

  • WCF服务
  • WCF客户端
  • 公共类库

WCF服务和客户端都有对公共类库的引用。我不想用DataContract属性标记所有类。

所以,我的问题是"WCF是否需要DataContract属性?"

我使用.NET 4和NetTcpBinding。


如果我记得正确(IIRC),如果您不使用正式的数据协定标记,那么它默认地像字段序列化程序一样工作。这是可行的,但不太容易进行版本更改,因为私有更改可能会破坏客户机/服务器。IMO您应该总是用数据协定/数据成员属性正式地修饰WCF类型。如果没有它们,它就可以工作,但是因为错误的原因(IIRC,最初它没有正式的标记就不能工作)。


"Is DataContract attributes required
for WCF"

从技术上讲,不是。这取决于是否使用DataContractSerializer(这是许多绑定的默认设置)。

还有其他选项:

  • 考虑其他序列化程序
  • 尝试使用数据契约代理(属性在某个地方仍然是必需的,但这可能意味着你可以不动你的类,如果相关的话)
  • 在序列化没有数据协定属性的类时,依赖于的序列化默认值

  • 不需要使用DataContract属性,没有这些属性,您的服务就可以正常工作。

    尽管如此,我真的不认为让您的服务和客户共享类库是最好的设计方法。如果通过DataContracts公开您的类型,这将更加清楚。

    如果有一天,有人想要使用您的服务,但没有访问共享类库的权限,会发生什么?


    您可以在WCF中使用几种序列化技术,这是一种很好的适应性。看一看:

    http://msdn.microsoft.com/en-us/magazine/cc163569.aspx