【问题标题】:Update WCF Web Service Reference更新 WCF Web 服务参考
【发布时间】:2018-03-29 22:02:47
【问题描述】:

我有一个 WCF SOAP 服务,最近更改了该方法的响应。我有其他应用程序使用此方法。我没有更改方法名称,它接受的参数。我所做的唯一更改是向响应对象添加了 2 个新属性。解释如下,

方法:

Public Class2 GetData(SampleClass1 data, bool extraStuffRequired)
{
    var obj = new Class2();
    //Process data here and load into obj
    return obj;
}

更改前Class2的定义:

Public class Class2
{
public string p1 {get; set;}
public string p2 {get; set;}
}

更改后Class2的定义:

Public class Class2
{
public string p1 {get; set;}
public string p2 {get; set;}

public string p3 {get; set;}
public string p4 {get; set;}
}

请注意,我添加了 2 个新属性 p3 和 p4,并且基于业务逻辑,我将在其中填充值或将它们设置为空字符串。

ConsumingApp1 需要这些新属性,因此它们更新服务引用并获取生成的类并使用新属性(p3 和 p4)。

ConsumingApp2 不想要它们,但它们确实调用了该方法,但只使用了 p1 和 p2。

我的问题是,我是否需要强制 ConsumingApp2 更新他们的服务参考,或者如果 ConsumingApp2 没有进行任何更改,它实际上是否可以正常工作?

【问题讨论】:

    标签: c# web-services wcf


    【解决方案1】:

    ,ConsumingApp2 应该没问题,无需更新服务参考。因此,p3、p4 的缺失值将被初始化为默认值。在您的情况下,由于 p3、p4 是 String 类型,因此它们将被初始化为 null。

    DataContract 版本规则如下

    1. 如果您添加新的非必需成员,则客户端将保留 unaffected 和 Missing 值被初始化为默认值。

    2. 如果您添加新的必需成员,则客户端将受到影响,并且 抛出异常。

    来自 [MSDN] 的截图总结。1另外你可以阅读更多关于Service Versioning & Versioning Strategy

    注意:在您发布的问题中,您没有为数据类型声明任何 DataContract 或 DataMember。

    【讨论】:

    • 谢谢@Agalo。你能让我知道究竟是什么必需的,非必需的意思吗?它们是新属性,因此 ConsumingApp2 不在代码中使用 then 并且也不想使用,因此如果他们在代码中使用它是必需的,如果不是,则不是必需的。我对吗 ?整个类都是用[Serializable]装饰的
    • IsRequired 是一个可以为 DataMember 修饰的属性,因此非必需意味着您的 DataMember 没有用 IsRequired 属性修饰。在一个场景中,IsRequired 被添加到 DataMember,如果 DataMember 不存在,它会抛出 SerializationException。从您发布的代码中,我相信您没有使用 IsRequired 属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多