4
  1. 我选择一个新项目 -> WCF -> WCF 服务应用程序
  2. 我将解决方案发布到我的网络服务器
  3. 我创建一个客户端应用程序并添加对我的 Web 服务器的引用http://mywebserver/service1.svc
  4. 客户端运行 GetData(1) 方法正常

一切都很好 - 到目前为止。

  1. 我将服务应用程序从:更改Function GetData(ByVal value As Integer)Function GetData(ByVal value As Integer, value2 As Integer)

  2. 我再次发布解决方案

  3. 令我惊讶的是,客户端应用程序运行方法 GetData(1) 很好。我希望它崩溃并要求第二个参数

知道为什么它没有崩溃吗?

我已经尝试重新启动 Web 服务器服务 - 仍然没有失败。

我已经在 Web.config 中尝试过这段代码......

<caching>
    <outputCache enableOutputCache="false"/>
    <outputCacheSettings>
    <outputCacheProfiles>
        </outputCacheProfiles>
    </outputCacheSettings>
</caching>

仍然没有失败。

任何想法?

4

2 回答 2

4

这仅仅是因为 WCF 使用Lax Versioning

在许多其他场景中,服务开发人员可以假设向数据合约添加新的可选成员不会破坏现有客户端。这需要服务开发人员调查现有客户端是否没有执行模式验证以及它们是否忽略了未知数据成员。在这些场景中,可以利用数据合约功能以不间断的方式添加新成员。如果版本控制的数据契约特性已经用于服务的第一个版本,那么服务开发人员可以自信地做出这个假设。

许多 Web 服务平台,包括 WCF 和 XML Web 服务,默认情况下不执行模式验证,因此允许 wsdl 未描述的额外元素。并非每个平台都是如此,一些 Java 客户端执行严格的模式验证。

现在尝试删除一个参数,你不会得到相同的结果。

于 2013-06-27T12:22:09.320 回答
1

http://msdn.microsoft.com/en-us/library/ff384251.aspx

向操作签名添加新参数 - 客户端不受影响。新参数在服务中初始化为默认值。

于 2013-06-27T12:27:05.190 回答