我对MessageContract属性在WCF中的工作原理有点困惑。
当我放置MessageContract时,代理显示两个参数,而不是1。
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属性时: Proxy生成正确的签名:
GetOperation(GetResultRequest request)有没有人能确认这是否是预期的行为?
发布于 2011-07-04 15:08:34
这是默认行为。在生成代理时,默认情况下它不会创建消息协定。您可以在Add Service reference中的advanced configuration中(通过选中Always generate message contracts)或通过svcutil中的/messageContract开关来启用此功能。一旦你打开它,你就会得到带有单一消息契约参数的方法,就像你在服务上做的那样。
发布于 2011-07-04 14:35:01
除非您有使用MessageHeader属性标记标头的特定要求,否则请尝试将类属性更改为Datacontract,并将属性更改为DataMember属性,并查看行为是否发生变化。据我所知,除非你实现了一个定制的序列化程序,否则你不能影响svcutil如何创建你的代理。
https://stackoverflow.com/questions/6567744
复制相似问题