4

我创建了一个简单的 WCF 应用程序,它公开了一个操作。此操作将复合数据类型作为参数。

我没有用 [DataContract] 属性修饰这个复合数据类型。但这是有效的,我可以在 WSDL 中看到它的架构。

现在我的理解是,这个新的自定义类型应该用 [Serializable] 或 [dataContract] 属性修饰,以参与 Web 服务操作。

我在这里缺少什么?

4

2 回答 2

13

自 .NET 3.5 SP1 起,WCF 中引入了 POCO 支持,您不再需要[DataContract]使用和[DataMember]属性来装饰您的对象。公共属性将自动公开。尽管我建议您使用这些属性明确标记它们。

于 2010-07-20T14:44:40.143 回答
5

正如 Darin 所说,sp1 引入了对推断数据协定的支持。如果编组的类型是公共类型并且没有用DataContract属性修饰,WCF 将自动推断出这样的属性并将该DataMemeber属性应用于该类型的所有公共成员。

Juval Löwy 在他的《Programming WCF Services》一书中说:

在我看来,依赖推断的数据契约是一种草率的技巧,它违背了 WCF 中大多数其他事物的本质。...请务必使用 DataContract 属性,并明确说明您的数据合同。这将使您能够利用数据合同功能,例如版本控制。

于 2010-07-20T14:50:21.633 回答