WCF操作参数和返回类型必须具有datacontract属性(始终)?
问题描述:
有人可以确认我是否应该始终具有DataContract和Datamember属性以用于操作参数和返回类型? 例如WCF操作参数和返回类型必须具有datacontract属性(始终)?
ResponseMessage getOrderDetails(RequestMessage msg)
{
....
}
public class ResponseMessage
{
...
}
public class RequestMessage
{
...
}
答
参数类型和返回类型需要为可序列化的或WCF以特殊方式处理。
对于第一种情况,[DataContract]
和[DataMember]
只是使类型可序列化的一种方法 - http://blogs.msdn.com/b/sowmy/archive/2006/02/22/536747.aspx的帖子描述了WCF中的序列化编程模型。正如Ladislav所说,从.NET 3.5 SP1开始,WCF引入了一个默认(POCO)序列化,因此您根本不需要任何注释。
对于第二种情况,有一些类型的被视为特殊情况由WCF,如System.IO.Stream
或System.ServiceModel.Channels.Message
- 如果你使用,你甚至可以添加更多的这种类型的一个custom message formatter(虽然这是一种先进的方案,而不是很常见)。
答
它仅在WCF(.NET 3.0)的第一个版本中才需要。在引入默认数据合约序列化之后,您不必将DataContract
属性放置在类中,并且所有具有getter和setter的公共属性都将被序列化。一旦你想更好地控制序列化,你将使用DataContract
和DataMember
属性,或者你将切换到Xml序列化。
感谢@Ladislav Mrnka,RequestMessage和ResponseMessage是自定义类。这些被认为是POCO,并在WCF 4.0中默认序列化? –