为什么接收太多参数的WCF服务没有破坏?

AGH*_*AGH 3 c# asp.net wcf

好的,这是一个奇怪的问题.我在项目中遇到了一段代码,它以编程方式创建基于接口的ChannelFactory.接口中的方法有三个参数.现在,当我查看实际的WCF服务代码时,该方法只需要两个参数,但是从客户端发送三个参数.

我希望服务在收到额外参数时会中断,但事实并非如此.有谁知道为什么这个有效?

Sha*_*ish 5

服务调用被编码到线路上并发送到接收器.根据XML/Binary/Json解析器的严格程度,简单地忽略额外参数.

当WCF服务器上的存根代码接收到有线调用时,它不会覆盖序列化数据包,并说"他们正在调用MethodX,我得到了param1,param2和param3 - 让我们尝试将它们填入方法中......哦.它.只需要param1和param2.轰隆."

相反,它说的是:"他们叫做MethodX.很好.它需要什么参数?Param1和Param2.让我们看看这些是否存在于数据包中.哦!他们在这里.很好.我会用它们." 它完全忽略了其余部分.

一些说明:

  1. 如果存在额外的东西,编写将会失败的存根并不困难.例如,WCF会在一些额外的东西上失败,而不会在其他东西上失败.
  2. 这有一个好处,你可以向前和可能向后兼容(即客户端V2与服务器V1的对话仍然有效,只是忽略参数[你可能想要或不想要]).