【问题标题】:Why does it work to add a parameter to my WCF service operation?为什么向我的 WCF 服务操作添加参数会起作用?
【发布时间】:2013-06-27 12:10:02
【问题描述】:
  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>

仍然没有失败。

有什么想法吗?

【问题讨论】:

  • 当您在 Visual Studio 中添加引用时,会关闭 WSDL 的本地副本,并生成本地 .cs 文件以提供代理。如果您更新服务并希望在客户端中查看更新,则需要右键单击服务引用并选择更新引用。

标签: c# vb.net wcf iis-7


【解决方案1】:

这仅仅是因为 WCF 使用了Lax Versioning

在许多其他情况下,服务开发人员可以做出假设 向数据合约添加新的可选成员不会中断 现有客户。这需要服务开发人员进行调查 现有客户端是否没有执行模式验证,并且 他们忽略未知的数据成员。在这些情况下,可能 利用数据合约功能添加新成员 非破坏性方式。服务开发人员可以做出这个假设 如果版本控制的数据合同功能已经 用于服务的第一个版本。

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-17
      • 2014-08-28
      • 2014-02-23
      • 2016-01-02
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2014-03-29
      相关资源
      最近更新 更多