我创建了一个简单的WCF应用程序,它暴露了一个操作。此操作将复合数据类型作为参数。
我没有用[DataContract]属性修饰这个复合数据类型。但这是有效的,我可以在WSDL中看到Schema。
现在我的理解是这个新的自定义类型应该用[Serializable]或[dataContract]属性进行修饰,以参与Web服务操作。
我在这里缺少什么?
答案 0 :(得分:11)
自.NET 3.5 SP1以来,WCF已经引入了POCO支持,并且您no longer need使用[DataContract]
和[DataMember]
属性来装饰对象。公共属性将自动公开。虽然我建议您使用这些属性明确标记它们。
答案 1 :(得分:5)
正如Darin所说,sp1引入了对推断数据合同的支持。如果编组类型是公共类型且未使用DataContract
属性进行修饰,则WCF将自动推断此类属性并将DataMemeber
属性应用于该类型的所有公共成员。
在他的“编程WCF服务”一书中,JuvalLöwy说;
在我看来,依赖于推断的数据合同是一个草率的黑客攻击,与WCF中的大多数其他内容相悖。 ...使用DataContract属性,并明确您的数据协定。这样您就可以使用数据合约功能,例如版本控制。