在使agment可选时,我是否需要更新WCF服务引用



我们有一个被许多其他进程使用的Web服务。它采用一个对象(由XSD生成)作为参数。该对象中的一个属性(日期时间)现在可以为null。

问题是:我现在是否必须找到引用此Web服务的所有流程并更新它们的引用,以便它们继续工作?

这是一个棘手的问题。

我认为你应该没事,因为你没有删除或添加新的参数到接口。

这只是对现有参数的一个简单更改,在我看来,你只是放松了这里的限制。不是强制参数不能接受null,而是说现在是。

我认为现有进程一定已经为该dateTime属性设置了不可为null的值?因此,对于要利用更改的新流程,它们必须更新引用,否则不需要更改。

不过,更改服务合同通常是个坏主意。你有没有考虑过在你的发行说明中包括这一变化?让你的客户意识到并能够采取适当的措施。

以下是另一个可能给您带来麻烦的突破性更改列表。

  • 删除操作
  • 更改操作名称
  • 删除操作参数
  • 添加操作参数
  • 更改操作参数名称或数据类型
  • 更改操作的返回值类型
  • 通过显式使用.NET属性或自定义序列化代码更改参数类型(数据约定)或操作(消息约定)的序列化XML格式
  • 修改服务操作编码格式(RPC编码与文档文本)

如果仅使属性从不可为null变为可为null,则更改服务约定需要更新服务引用。

您可以创建一个共享项目来维护服务引用,而不是每个项目都使用服务来创建自己的引用。这样,你就不需要经历所有的项目和应用程序,也不需要为每一个项目和应用都经历这个过程。

更好的解决方案仍然是在一个单独的项目/程序集中定义POCO,并在服务和客户端引用它。WCF和VS足够聪明,可以识别出它不必为服务类创建代理类,而是将使用单独程序集中的POCO。如果只在添加/删除类或更改服务接口时更改服务公开的类中的属性,则甚至不必更新服务引用。

最新更新