请WCF MessageContract澄清

时间:2011-07-04 05:53:59

标签: wcf

我对MessageContract Attribute在WCF中的工作方式感到困惑。

当我放置MessageContract时,代理显示两个参数而不是1。 e.g。

GetResultResponse GetOperation(GetResultRequest request)

[MessageContract]
public class GetResultRequest 
{
   [MessageHeader]
   public Header Header { get; set; }
   [MessageBodyMember]
   public List<Person> PersonList { get; set; }

}

代理生成此方法签名:

GetOperation(ref Header, List<Person> personList)

删除MEssageContract属性时: 代理生成正确的签名:

GetOperation(GetResultRequest request)

有人可以确认这是否是预期的行为?

2 个答案:

答案 0 :(得分:6)

这是默认行为。生成代理时,默认情况下不会创建消息协定。您可以在添加服务参考advanced configuration启用此功能(通过选中始终生成邮件合同)或/messageContract切换svcutil }。打开它后,您将获得具有单个消息协定参数的方法,就像您在服务上一样。

答案 1 :(得分:0)

除非您具有使用MessageHeader属性标记标头的特定要求,否则请尝试将class属性更改为Datacontract,将属性更改为DataMember属性,并查看行为是否更改。据我所知,除非您实现自定义序列化程序,否则无法影响svcutil如何创建代理。