- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我已将我的 Web 服务转换为具有一些数据契约(Contract)的 wcf 服务。作为最佳实践,建议 DataContracts 应继承自 IExtensibleDataObject。我明白了,在添加或删除数据成员的情况下,IExtensibleDataObject 很有用。但我无法了解客户将如何访问已删除的数据成员。这是我的代码:
[ServiceContract(Namespace = "http://mycompany.com/2010/08/")]
public class MyWebService {
[OperationContract]
public Employee Add(Employee emp)
{
// Some Processing
}
}
[DataContract(Name = "Employee", Namespace = "http://mycompany.com/2010/08/")]
public class Employee : IExtensibleDataObject {
[DataMember] public string FirstName;
[DataMember] public string LastName;
public ExtensionDataObject ExtensionData { get; set; }
}
现在在我的下一个 Web 服务版本中,我对 DataContract 做了一些更改
[DataContract(Name = "Employee", Namespace = "http://mycompany.com/2010/09/")]
public class Employee : IExtensibleDataObject {
[DataMember] public string FirstName;
[DataMember] public string LastName;
[DataMember(IsRequired = true)] public string MiddleName;
public ExtensionDataObject ExtensionData { get; set; }
}
但是,我的客户端正在访问我的旧版本 Web 服务,但由于未提供 MiddleName 字段而出现错误。我仍然对 IExtensionDataObject 的用法感到困惑。
最佳答案
这是 IExtensibleDataObject 的不正确用法。您已经在服务器端修改了数据契约(Contract),并且根据需要标记了新字段,这意味着您破坏了版本控制并且没有任何帮助。
IExtensibleDataObject 用于其他目的。假设您已经修改了客户端,以便客户端上的数据协定包含 MiddleName。现在您设置 MiddleName 并使用添加服务操作。返回的 Employee 对象中的 MiddleName 值是多少?如果您不使用 IExtensibleDataObject,该值将为 null,如果您使用 IExtensibleDataObject,该值将与您为输入参数设置的值相同。
当使用 DataContractSerializer 时,WCF 会丢弃所有无法理解的参数。 IExtensibleDataObject 通过将所有这些参数存储在特殊集合中并将它们发送回客户端来避免这种情况。
如果您想使用契约(Contract)版本控制,请忘记必填字段。这是打破它的第一件事。
关于c# - IExtensibleDataObject 在客户端中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3434045/
我已将我的 Web 服务转换为具有一些数据契约(Contract)的 wcf 服务。作为最佳实践,建议 DataContracts 应继承自 IExtensibleDataObject。我明白了,在添
我想弄清楚 IExtensibleDataObject 和 IExtensibleObject 之间的区别。 MSDN 说第一个(IExtensibleDataObject)是让可能添加属性的对象反序
使用 DataContracts,您可以从 IExtensibleDataObject 派生以允许往返工作,而不会丢失 XML 文件中的任何未知附加数据。 我不能使用 DataContract,因为我
我在我的获胜表格上遇到了这个错误“system.Runtime.Serialization.DataContractAttrubute 未定义”与“IExtensibleDataObject、Exte
我创建了一个服务,当调用它并执行它时出现以下错误。谁能告诉我这是什么错误 The type 'System.Runtime.Serialization.IExtensibleDataObject' i
我在SilverLight项目中使用WCF服务。但是在编译解决方案时,出现以下错误: 命名空间"System.Runtime.Serialization"中不存在类型或命名空间名称"IExtensib
我是一名优秀的程序员,十分优秀!