知识大全 WCF Data Contract对Collection和D

Posted

篇首语:知识虽宝贵,但更可贵的却在于运用。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 WCF Data Contract对Collection和D相关的知识,希望对你有一定的参考价值。

WCF中的Data Contract:WCF Data Contract对Collection和D  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Data Contract for Collection

  我们照例用例子来说明问题 在这里我们创建一个批量处理Order的Service 于是我们创建了一个OrderCollection Type

  

  namespace Artech SpecialDataContract Contract[DataContract]public class Order[DataMember]public Guid OrderID get; set;

  [DataMember]public DateTime OrderDate get; set;

  public class OrderCollection : List

  

  下面是Service Contract的定义

  

  namespace Artech SpecialDataContract Contract[ServiceContract]public interface IOrderManager[OperationContract(Name = ProcessWithCollection )]void Process(OrderCollection orders);

面是OrderCollection 在XSD中的呈现

  

  <?xml version= encoding= utf ?><xs:schema elementFormDefault= qualified

  targetNamespace=

   xmlns:xs=

  xmlns:tns= xmlns:ser= ><xs:import

  schemaLocation= d namespace= /><xs:plexType name= ArrayOfOrder ><xs:sequence><xs:element minOccurs= maxOccurs= unbounded name= Order

  nillable= true type= tns:Order /></xs:sequence></xs:plexType><xs:element name= ArrayOfOrder nillable= true type= tns:ArrayOfOrder /><xs:plexTypename= Order ><xs:sequence><xs:element minOccurs= name= OrderDate type= xs:dateTime /><xs:elementminOccurs= name= OrderID type= ser:guid /></xs:sequence></xs:plexType><xs:elementname= Order nillable= true type= tns:Order /></xs:schema>

  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")][System.ServiceModel.ServiceContractAttribute(ConfigurationName="OrderManagerService.

  IOrderManager")]public interface IOrderManager [System.ServiceModel.OperationContractAttribute(Action=

  "",

  ReplyAction="

  ProcessWithCollectionResponse")]void ProcessWithCollection(Artech.SpecialDataContract.Client.OrderManagerService.

  Order[] orders);

  因为Array相对很Common的数据类型,基本上所有的厂商均提供了对Array的支持,这也是WCF在通过Add Service Reference生成Client端代码的时候,会生成Array的原因。.wiNGwIT不过并不是我们只有唯一的选择,事实上VS为此提供了扩展,允许我们对于基于Collection 的Data Contract生成我们需要的各种类型,我们只需要在Add Service Reference的时候选择“Configure Service Reference”进行相应的配置:

  通过上面的截图,我们发现在Collection Type一项我们有若干选项,我们可以选择我们希望生成的数据类型:Array,ArrayList,LinkedList,Generic List,Collection和BindingList。

  Data Contract for Dictionary

  前面的内容,我们分别讨论了基于Generic和Collection的Data Contract,接下来,我们来讨论最后一个特殊的数据类型的Data Contract:Dictionary。

  延续上面的Order Batch Processing的例子,不过我们现在处理的不是一个OrderCollection对象,而是一个Dictionary对象,线面是Service Contract和Order的定义:

  

  namespace Artech.SpecialDataContract.Contract[ServiceContract]public interface IOrderManager[OperationContract(Name = "ProcessWithCollection")]void Process(OrderCollection orders);

  [OperationContract(Name = "ProcessWithDictionary")]void Process(IDictionary orders); 

   [DataContract]public class Order[DataMember]public Guid OrderID get; set;

  [DataMember]public DateTime OrderDate get; set;

  闲话少说,我们来看XSD:

  

  <?xml version="1.0" encoding="utf-8"?><xs:schema elementFormDefault="qualified"

  targetNamespace=""

  xmlns:xs=""

  xmlns:tns=""

  xmlns:ser=""><xs:import schemaLocation=

  "d1"

  namespace=""/><xs:import schemaLocation=

  "d2"

  namespace=""/><xs:plexType name=ArrayOfKeyValueOfguidOrder_SkVQi6O3><xs:annotation><xs:appinfo><IsDictionary xmlns=

  "true">true</IsDictionary></xs:appinfo></xs:annotation><xs:sequence><xs:element minOccurs="0" maxOccurs="unbounded" name=KeyValueOfguidOrder_SkVQi6O3><xs:plexType><xs:sequence><xs:element name=Key type=ser:guid/><xs:element name=Value nillable="true" type=q1:Order

  xmlns:q1=""/></xs:sequence></xs:plexType></xs:element></xs:sequence></xs:plexType><xs:element name=ArrayOfKeyValueOfguidOrder_SkVQi6O3 nillable="true"

  type="tns:ArrayOfKeyValueOfguidOrder_SkVQi6O3"/></xs:schema>

Data Contract的名称为ArrayOfKeyValueOfguidOrder_SkVQi6O3=ArrayOfKeyValueOf+guid(Key的类型)+Order(Value)+_SkVQi6O3(Hash Value)。从该XSD的结构我们不难看出,只是一个数组,每个元素为Key-Value pair。

  

    

  我们照例看看通过Add Service Reference方式生成的Client端code中的对应的定义:

  

  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")][System.ServiceModel.ServiceContractAttribute(ConfigurationName=

  "OrderManagerService.IOrderManager")]public interface IOrderManager                [System.ServiceModel.OperationContractAttribute(Action=

  "",

  ReplyAction="")]void ProcessWithDictionary(System.Collections.Generic.Dictionary<System.Guid,

  Artech.SpecialDataContract.Client.OrderManagerService.Order> orders);

  生成的是一个System.Collections.Generic.Dictionary类型。同Collection一样,也依然可以有多种选择:

  

  

图1    cha138/Article/program/net/201311/13994

相关参考

知识大全 WCF Data Contract集合类型

WCFDataContract集合类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Net中

知识大全 简介WCF Data Contract的两个版本

简介WCFDataContract的两个版本  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!中断式改

知识大全 Data Contract概览

WCF中的DataContract:DataContract概览  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 WCF 3.5对HTTP编程的增强

WCF3.5对HTTP编程的增强  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  NETFrame

知识大全 一起学WCF--wcf初识

一起学WCF--wcf初识  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近想把有关WCF的内

知识大全 WCF Tips之WCF应用程序的程序集划分

WCFTips之WCF应用程序的程序集划分  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  WCF

知识大全 jquery click([data],fn)使用方法实例介绍

大概意思就是触发每一个匹配元素的click事件本文通过一个实例为大家详细介绍下jqueryclick([data]fn)的使用方法感兴趣的朋友可以参考下哈希望对大家有所帮助   click(

知识大全 ajax调用WCF服务

ajax调用WCF服务  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  关于AJAX调用WCF服务

知识大全 一起学WCF--数据契约

一起学WCF--数据契约  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这一节我们来了解下WCF

知识大全 浅析概括WCF自托管宿主

浅析概括WCF自托管宿主  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  学习WCF时你可能会遇到