0

考虑以下 ServiceContract-Interface:

[ServiceContract]
public interface ITest
{
    [OperationContract]
    void MyMethod(MyClass obj);
}

使用 MyClass 蜜蜂:

[MessageContract]
public MyClass
{
    [MessageBodyMember(Order = 0)]
    public int A { get; set; }

    [MessageBodyMember(Order = 1)]
    public int B { get; set; }

    [MessageBodyMember(Order = 2)]
    public int C { get; set; }
}

MyClass现在更改为如下所示:

[MessageContract]
public MyClass
{
    [MessageBodyMember(Order = 0)]
    public int A { get; set; }

    [MessageBodyMember(Order = 2)]
    public int C { get; set; }
}

使用此 WCF 服务的客户端是否需要进行其他更改才能使用新的服务定义?

另外,如果我要另外更改C以拥有新的会发生什么Order = 1

4

2 回答 2

2

如果客户端更新 WSDL 文件,当客户端调用该方法时,它会在客户端的代码中出现语法错误。

order元素设置bodymember发送到服务器/客户端的通信中的哪个位置。您可以在 svc 日志中看到它。例子。:

<ns2: myClass xmlns:ns2="yourNamespace">
<A xmlns=""></A>
<B xmlns=""></B>
<C xmlns=""></C>
</ns2:myClass>

更改 orderer 元素后:

<ns2: myClass xmlns:ns2="yourNamespace">
<C xmlns=""></C>
<A xmlns=""></A>
<B xmlns=""></B>
</ns2: myClass >

我已经为你尝试了这个例子。我使用了 WCF C# Web 服务和具有标准协议的 C# 客户端:BasicHttpBinding。我使用 WCF 测试客户端。在这种组合中,只要客户端没有进行 WSDL 更新,我的客户端就没有错误。在这种情况下,您可以更改订单元素而不会出错。但这不是正确的实现;因此,您不能假设一切正常。对于其他客户,看到的结果可能会有所不同。例如,Java 客户端的限制要大得多。

于 2015-08-31T13:15:26.667 回答
0

添加到@naro的答案:

对于以下框架,这不是重大更改:

  • .NET (C#, 4.5)
  • 爪哇 8

我没有测试其他任何东西,因为这对我们的场景无关紧要。

这意味着即使在更新 Web 服务定义之后,每个客户端仍然可以工作(无需重新生成客户端)。

于 2015-09-07T09:07:25.117 回答