首页 / 软件开发 / .NET编程技术 / 谈谈WCF中的Data Contract(4):WCF Data Contract Versioning
谈谈WCF中的Data Contract(4):WCF Data Contract Versioning2010-12-29 cnblogs.com artech是一门独特的工程艺术,需要解决的是不断改变的需求变化。而对于WCF,对于SOA,由于涉及的是对多个系统之间的交互问题,如何有效地解决不断改变的需求所带来的问题就显得更为重要:Service端版本的变化能否保持现有Consumer的正常调用,Consumer端的改变不至于影响对Service 的正常调用。对于Data Contract来说就是要解决这样的问题:Service端或者Client对Data Type的改变不会影响Service的正常调用。在系统开发过程中,通过对Data Type添加额外的字段进而对其进行扩展,是一个种很常见的场景。本部分就作中介绍Data Contract的这种变化,Service或者Client的Data Contract在本地添加一个新的Data Member会造成怎样的影响,WCF可以采用怎样的机制来解决这种单方面Data Contract版本的改变。我们同样通过Dome来说话。在这个Demo中,我使用上面介绍的Order Processing的场景,下面是整个Solution的结构(需要说明的是,本片文章提供的Code片断和Source Code都是基于VS 2008的)。1.Service端: Artech.DataContractVersioning.ServiceData Contractusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
namespace Artech.DataContractVersioning.Service
{
[DataContract(Namespace="http://artech.datacontractversioning")]
public class Order
{
[DataMember(Order = 0)]
public Guid OrderID
{get;set;}
[DataMember(Order = 1)]
public DateTime OrderDate
{ get; set; }
[DataMember(Order = 2)]
public Guid SupplierID
{ get; set; }
}
}
Service Contract 和Service Implementation: Process方法简单地将Order对象返回到客户端,当Client接受到Service返回的Order对象后,可以检测和由它传递给Service的Order对象有什么不同。using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
namespace Artech.DataContractVersioning.Service
{
[ServiceContract]
public interface IOrderManager
{
[OperationContract]
Order Process(Order order);
}
}
namespace Artech.DataContractVersioning.Service
{
public class OrderManagerService:IOrderManager
{
IOrderManager Members#region IOrderManager Members
public Order Process(Order order)
{
return order;
}
#endregion
}
}