好的,这是一个奇怪的问题。我在项目中遇到了一段代码,它以编程方式创建基于接口的ChannelFactory。接口中的方法有三个参数。现在,当我查看实际的WCF服务代码时,该方法只需要两个参数,但是从客户端发送三个参数。
我希望服务在收到额外参数时中断,但它没有。有谁知道为什么这个有效?
答案 0 :(得分:5)
服务呼叫被编码到线路上并发送到接收器。根据XML / Binary / Json解析器的严格程度,可以忽略额外的参数。
当WCF服务器上的存根代码接收到有线调用时,它不会覆盖序列化数据包并说“#34;他们正在调用MethodX,我得到了param1,param2和param3 - 让我们尝试填充他们在方法里面......哦。它只需要param1和param2。 。吊杆"
相反,它说的是: "他们称为MethodX。大。它需要什么参数? Param1和Param2。让我们看看这些是否存在于数据包中。哦!他们在这里。甜。我会用它们。"它完全忽略了其余部分。
一些注意事项:
答案 1 :(得分:1)
WCF有Forward Compatible Data Contracts。
如果服务合同继承自IExtensibleDataObject,则服务行为是存储而不是在找到额外的输入数据时抛出错误。
当WCF基础结构遇到不属于的数据时 原始数据合同,数据存储在属性和 保存。除临时情况外,不会以任何其他方式处理 存储。如果对象返回到它发起的位置,那么 还返回原始(未知)数据。因此,数据已经做出 往返起点的往返往返,无损失。