请教WCF中DataContract的Name和Namespace对反序列化有什么影响?

问题描述

DataContract的Name和Namespace属性有什么用?特别是在序列化和反序列化时有什么用?例子:Server端得定义:namespaceDerivativeCalculatorService{[DataContract(Name="MyServiceDataContractName",Namespace="MyNamespace")]publicclassSeriveViewOfData{[DataMember(Name="Prop1")]publicstring[]Prop1{get;set;}[DataMember(Name="Prop2")]publicdecimal[]Prop2{get;set;}[DataMember(Name="Value")]publicdecimalValue{get;set;}}[ServiceContract(Name="DerivativesCalculator")]publicinterfaceIServiceViewOfService{[OperationContract]SeriveViewOfDataCalculatorDerivative(SeriveViewOfDatainput);}publicclassServiceViewOfServiceType:IServiceViewOfService{publicSeriveViewOfDataCalculatorDerivative(SeriveViewOfDatainput){input.Value+=1;returninput;}}}Client的定义:namespaceDarivativeCalculatorClient{[DataContract(Name="Test",Namespace="MyNamespace")]publicclassClientViewOfData{[DataMember(Name="Prop1")]publicstring[]Prop1{get;set;}[DataMember(Name="PropTest")]publicdecimal[]Prop2{get;set;}[DataMember(Name="Value")]publicdecimalValue{get;set;}}[ServiceContract(Name="DerivativesCalculator")]publicinterfaceIClientViewOfService{[OperationContract]ClientViewOfDataCalculatorDerivative(ClientViewOfDatainput);}}Main函数:publicstaticvoidMain(string[]args){stringaddress="http://localhost:8000/Derivatives/Calculator";ChannelFactory<IClientViewOfService>factory=newChannelFactory<IClientViewOfService>(newBasicHttpBinding(),newEndpointAddress(newUri(address)));IClientViewOfServiceproxy=factory.CreateChannel();ClientViewOfDataviewOfData=newClientViewOfData(){Prop1=newstring[]{"MSFT"},Prop2=newdecimal[]{5}};ClientViewOfDataresult=proxy.CalculatorDerivative(viewOfData);Console.WriteLine("Valueis{0}",result.Value);Console.ReadLine();((IChannel)proxy).Close();}可以发现,Client端DataContract:ClientViewOfData的Prop2的DataMember的名称和Server端的不一致,所以,发现server端ServiceViewOfServiceType的CalculatorDerivative方法中,input参数的Prop2=null,这个比较好理解。但是,为什么Client端和Server端DataContractname定义不一致时,这个还是可以正常调用的呢?Client端DataContract:ClientViewOfData的Name="Test"Server端DataContract:SeriveViewOfData的Name="MyServiceDataContractName"是不是,在反序列化的时候,只需要client传过来的xml中的namespace和Server端OperationContract中参数类型,就可以成功反序列化了???

解决方案

本帖最后由 lyso2008 于 2011-05-10 00:45:00 编辑
解决方案二:
ding!!!

时间: 2024-08-04 09:21:39

请教WCF中DataContract的Name和Namespace对反序列化有什么影响?的相关文章

WCF中DataContract的类的对象创建问题(放在服务端,还是客户端?)

问题描述 是否需要控制客户端对DataContract类的实例化.比如说,我创建一个DataContract类叫BO,在实例化一个BO的时候需要执行很多初始化的工作,比较复杂.为了控制这个初始化过程,可以在服务端创建一个IBOFactory的服务接口(包含BOCreate(ClassApara)函数).先在客户端调用BOCreate(ClassApara),将para信息传给服务端,服务端再进行BO的实例化工作,然后再把实例化的BO传给客户端.但是这样无疑会增加网络的负担,特别是批量创建BO实例

WCF 中的数据传输问题!!!!!!!!!!!请教啊

问题描述 请问大侠们一个问题怎么才能通过WCF的服务器端主动向客户端传递数据啊我们知道通过配置文件,客户端可以调用服务器的程序.但是怎么才能服务器向客户端传递呢客户端又怎么接受呢例如SOCKET中有sendxxx()和getxxx()函数可以分别发送和接受数据,WCF中怎么实现 解决方案 解决方案二:marks解决方案三:用WCF中的Duplex

谈谈WCF中的Data Contract(3)

谈谈WCF中的Data Contract(3):WCF Data Contract对Collection & Dictionary的支持 在本篇文章上一部分Order Processing的例子中,我们看到原本已Collection形式定义的DetailList属性(public IList<TDetail> DetailList),在Data Contract中却以Array的方式体现(public OrderDetail[] DetailList).我们现在就来详细地讨论一下基于C

谈谈WCF中的Data Contract (1):Data Contract Overview

Contract in SO:Contract是对操作和数据的抽象 在我们看来,Service Orientation提供了一种对业务.功能进行分解的方式.针对SO,我们把一个具体的业务流程或者一个复杂的功能分解成一个个独立完成某项任务的子单元,这些子单元通过一个个Service来承载.对于Service本身来讲,他们应该是自治的,独自完成自己的功能.不依赖于其他的Service.但是Service的价值体现在它被潜在的消费者使用的程度.这实际上包含两方面的内容,作为Service本身,它如何将

我的WCF之旅(4):WCF中的序列化[上篇]

SOA 和Message Windows Communication Foundation (WCF) 是基于面向服务架构(Service Orientation Architecture--SOA)的一种理想的分布式技术(Distributed Technology), 相信在今后在建立基于SOA企业级别的解决方案和进行系统集成方面将会大有作为.一个基于SOA结构的互联系统(Connected System)通常由若干相互独立的子系统(Sub-System)组成,这些子系统可能一个独立的App

我的WCF之旅(4):WCF中的序列化[下篇]

... ...续Part I([原创] 我的WCF之旅(4):WCF中的序列化(Serialization)- Part I) XMLSerializer 提到XMLSerializer,我想绝大多数人都知道这是asmx采用的Serializer.首先我们还是来看一个例子,通过比较Managed Type的结构和生成的XML的结构来总结这种序列化方式采用的是怎样的一种Mapping方式.和DataContractSerialzer Sample一样,我们要定义用于序列化对象所属的Type--XM

艾伟:[原创]谈谈WCF中的Data Contract(4):WCF Data Contract Versioning

软件工程是一门独特的工程艺术,需要解决的是不断改变的需求变化.而对于WCF,对于SOA,由于涉及的是对多个系统之间的交互问题,如何有效地解决不断改变的需求所带来的问题就显得更为重要:Service端版本的变化能否保持现有Consumer的正常调用,Consumer端的改变不至于影响对Service 的正常调用.对于Data Contract来说就是要解决这样的问题:Service端或者Client对Data Type的改变不会影响Service的正常调用. 在系统开发过程中,通过对Data Ty

在 WCF 中使用高效的 BinaryFormatter 序列化

本文将定义一个 WCF 终结点行为扩展,以在 WCF 中使用更高效的 BinaryFormatter 进行二进制序列化,并实现对是否使用传统二进制序列化功能的可配置. 介绍 实现步骤 使用方法 效果   介绍 在 OEA 框架中,是使用 WCF 作为数据传输框架.但是使用 WCF 内部的二进制序列化,序列化后的数据大小,要比使用传统的 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 类进行序列化后的数据大小要大得多.作

WCF技术剖析之十一:异步操作在WCF中的应用(下篇)

说完了客户端的异步服务调用(参阅WCF技术剖析之十一:异步操作在WCF中的应用(上篇)),我们在来谈谈服务端如何通过异步的方式为服务提供实现.在定义服务契约的时候,相信大家已经注意到了OperationContractAttribute特性具有一个bool类型的AsynPattern.该属性可以将一个服务操作定义成异步实现模式,接下来的内容主要是着眼于介绍异步操作的定义和实现原理. 一.异步操作的定义和实现原理 实现WCF异步服务操作模式在编程上具有一些限制:异步服务操作是通过两个配对的方法实现