Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除MessageContract中的MessageBodyMember是否被视为破坏性更改?_C#_Wcf_Messagecontract - Fatal编程技术网

C# 删除MessageContract中的MessageBodyMember是否被视为破坏性更改?

C# 删除MessageContract中的MessageBodyMember是否被视为破坏性更改?,c#,wcf,messagecontract,C#,Wcf,Messagecontract,考虑以下ServiceContract接口: [ServiceContract] public interface ITest { [OperationContract] void MyMethod(MyClass obj); } 用MyClass Being: [MessageContract] public MyClass { [MessageBodyMember(Order = 0)] public int A { get; set; } [Me

考虑以下ServiceContract接口:

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

[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

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

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

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

更改ordner元素后:

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


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

在@naro的回答中添加:

对于以下框架来说,这是一个突破性的改变:

  • .NET(C#,4.5)
  • 爪哇8
我没有测试其他任何东西,因为这与我们的场景无关


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

谢谢!由于该类仅用于将数据从客户机发送到服务器,因此根据您的解释,即使未进行wsdl更新,客户机仍然可以使用该服务?如果使用对象“MyClient”将数据从客户机发送到服务器,则必须将该对象填充到客户机中。客户端不是将MessageBodyMember设置为“B”吗?当然,客户端仍将填充“B”并将其传递给服务器,客户端尚未更新wsdl。问题是:服务器是否能够处理这个问题并接受请求?当对象中有一个对象时会发生什么?是否可以将“顺序”属性用于其他内部属性?