我没有在服务器的DC中实现此接口。
虽然我自动在客户端生成了VS2008生成的这个实现,但没问题。
现在我去编辑我的Reference.cs以包含一个新字段(区分特定服务方法的服务器DC(输入参数))
编译,运行指向旧服务的代码,虽然我将新字段的值(示例布尔类型设置为true)忽略了我的值,但它的工作正常。
那么为什么要在服务器上实现DC
我期待向前兼容,它运作正常。
现在我删除了我在#3中添加的代码。编译。
而是在服务器DC编译中添加了相同的字段。
现在我运行从客户端向服务器发送较少数据的代码DC有更多列。它工作正常。这意味着向后兼容性工作正常吗?
希望我的理解不正确?
我的环境是.Net 3.5 Sp1
答案 0 :(得分:1)
IExtensibleDataObject用于不同目的。假设您有以下操作:
[DataContract]
public class MyObject
{
[DataMember]
public string MyMember { get; set; }
}
[ServiceContract]
public class MyService
{
[OperationContract]
public MyObject Operation(MyObject object)
{
object.MyMember += " modified";
return object;
}
}
预期的行为是Operation返回修改后的参数。
现在假设您在客户端修改数据合同:
[DataContract]
public class MyObject
{
[DataMember]
public string MyMember { get; set; }
[DataMember]
public string MyNewMember { get; set; }
}
现在让我们调用操作:
var client = new MyServiceClient();
var myObject = new MyObject
{
MyMember = "Member",
MyNewMember = "Some value"
};
MyObject returnedObject = client.Operation(myObject);
服务的数据协定没有实现IExtensibleDataObject,也不知道MyNewMember属性。 returnObject.MyNewMember中的值是多少?它将为null。但是如果你在服务器端实现IExtensibleDataObject,它将是“一些值”,即使服务器对这个属性一无所知。