请WCF MessageContract澄清

Nil*_*Pun 1 wcf

我对MessageContract Attribute在WCF中的工作原理感到困惑.

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

GetResultResponse GetOperation(GetResultRequest request)

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

}
Run Code Online (Sandbox Code Playgroud)

代理生成此方法签名:

GetOperation(ref Header, List<Person> personList)
Run Code Online (Sandbox Code Playgroud)

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

GetOperation(GetResultRequest request)
Run Code Online (Sandbox Code Playgroud)

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

Lad*_*nka 6

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