2016-01-20 241 views
0

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

方法:

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

Class2中的定义修改前:等级2的变化后

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

定义:

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,并基于busniess逻辑,我会填充它们中的值或将它们设置为空特林。所以他们更新服务参考,并得到生成的类和使用新特性(P3和P4)

ConsumingApp1希望这些新的特性。

ConsumingApp2不希望他们,但他们做的调用方法,但只使用P1 P2 &。

我的问题是,我是否需要强制ConsumingApp2更新其服务引用或将它实际上没有ConsumingApp2做任何修改工作得很好?

回答

0

没有,ConsumingApp2应该没有更新服务引用罚款。所以,缺少p3,p4的值将被初始化为默认值。在你的情况下,由于p3,p4是String类型,它们将被初始化为null。

对于DataContract版规则是以下

  1. 如果你添加新的非必需成员,然后客户端将保持 不受影响缺失值被初始化为默认值。

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

总结自[MSDN]的截图。 1你也可以阅读更多有关Service Versioning & Versioning Strategyenter image description here

注:在您贴出的问题,你有没有宣布任何DataContract或数据成员的数据类型。

+0

谢谢@Agalo。你能让我知道究竟需要什么,非必需的手段?它们是新的属性,所以ConsumingApp2在代码中不使用,不想使用,因此如果它们在代码中使用它的必需和非必需的话。我对吗 ?整个类是用[Serializable] –

+0

装饰的。IsRequired是一个可以为DataMember装饰的属性,因此非必需意味着您的DataMember没有用IsRequired属性装饰。在场景中,IsRequired被添加到DataMember中,如果DataMember不存在,则会抛出SerializationException。从你发布的代码中,我确实相信你没有使用IsRequired属性。 – Agalo