WCF操作参数和返回类型必须具有datacontract属性(总是)?

时间:2011-08-22 12:46:51

标签: wcf

有人可以确认我是否应该始终拥有Operation Parameter和返回类型的DataContract和datamember属性? e.g。

ResponseMessage getOrderDetails(RequestMessage msg)
{
  ....
}


public class ResponseMessage
{
  ...
}


public class RequestMessage
{
  ...
}

2 个答案:

答案 0 :(得分:3)

仅在第一版WCF(.NET 3.0)中才需要它。在引入默认数据协定序列化之后,您不必在您的类上放置DataContract属性,并且将序列化具有getter和setter的所有公共属性。一旦您想要更好地控制序列化,您将使用DataContractDataMember属性,或者您将切换到Xml序列化。

答案 1 :(得分:0)

参数类型和返回类型必须是可序列化或由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.StreamSystem.ServiceModel.Channels.Message - 如果使用{{3,您甚至可以添加更多此类类型(虽然这是一个高级场景,并不常见)。