技术开发 频道

WCF中的Data Contract:Data Contract Overview


Data Contract Mapping Mechanism

   通过上面的介绍,我们发现WCF Data Contract就如同一个适配器,弥合了 CLR Type和Neutral Contract的差异,很容易地实现了他们之间的匹配。接下来,我们就以一个实际的例子来介绍WCF DataContract的这种适配功能:通过DataContractAttribute的修饰,实现了将一个现有Data Type向一个既定的Neutral Data Contract进行适配,从而实现了对基于该Neutral Data Contract的Service 进行正常调用的目的。

   我们就以上面提到的Order Class为例,Service端的Order class最终暴露成一个以XSD表示的Neutral Contract:

   Order class:

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; }
}
}
   XSD:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema elementFormDefault="qualified" targetNamespace="http://artech.datacontractversioning"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://artech.datacontractversioning"
xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/">
<xs:import schemaLocation="http://artech/Artech.DataContractVersioning/OrderManagerService.svc?xsd=xsd1"
namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
<xs:complexType name="Order">
<xs:sequence>
<xs:element minOccurs="0" name="OrderID" type="ser:guid" />
<xs:element minOccurs="0" name="OrderDate" type="xs:dateTime" />
<xs:element minOccurs="0" name="SupplierID" type="ser:guid" />
</xs:sequence>
</xs:complexType><xs:element name="Order" nillable="true" type="tns:Order"/></xs:schema>
   设我们在Client有一个与之结构相似的CustomOrder class:
public class CustomOrder 
{
public Guid OrderNo
{ get; set; }

public Guid SupplierNo
{ get; set; }

public DateTime OrderDate
{ get; set; }
0
相关文章