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;
}
}
Ожидаемое поведение - операция возвращает измененный параметр.
Теперь предположим, что вы изменили контракт данных на клиенте:
[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? Это будет ноль. Но если вы реализуете IExtensibleDataObject на стороне сервера, это будет «Некое значение», даже если сервер ничего не знает об этом свойстве.