数据表示
来源:互联网 发布:bt资源下载软件 编辑:程序博客网 时间:2024/05/02 02:26
Messsage是wcf信道层提供的一个类,在这个类中,数据被标识成一个xml infoset。当数据准备从客户端传输给服务端时,绑定里指定的信息编码协议将决定包含客户端所提供数据的Message对象以何种方式提交给服务。
当wcf服务接收到传输数据时,不管客户端是怎么样的编码格式,消息编码绑定元素会重新将它组装成一个Message对象,客户端发送的数据对象就会在Message对象中以XML InfoSet的形式表示。这个Message对象传送给Wcf的调度器(dispatcher)组件,它从xml infoset中抽取客户端的数据项,然后调用服务中实现了客户端请求的操作的方法,而这些数据项将作为方法的参数。
综上所述,即客户端发送给服务的数据会被序列化成xml,然后再服务端又会从xml反序列化成原始的数据。
wcf提供了两种xml序列化工具来完成上述任务。即System.xml.serialization.xmlserializer;System.runtime.serialization.datacontractserializer。其中,xmlSerializer为如何将数据表示成xml提供了精确的控制,默认将所有公有数据项序列化成xml;datacontractserializer只允许指定在xml中用来引用数据的命名空间和名称,以及数据项在xml里出现的顺序;天降datamember显示地指定哪些数据需要序列化。
服务端契约:
服务端契约实现:
客户端契约形式:
注意与服务端的差别
若服务版本的类型与客户端的类型被用来定义相互兼容(具有相同的命名空间和名称,而且每个版本契约里具有相同名称的成员都具有同样的类型)的数据契约。若客户端本本包括服务端版本没有的成员,可以在实现IExtensibledataobject接口。通过使用这个接口,类会另外分配空间,这样datacontractserializer可以用来存储、访问数据契约其他版本可能包含的成员字段。
服务端版本:
客户端版本:
当需要使用参数类型的子类型的实例作为输入来访问服务时,就必须添加ServiceKnownType特性,即应避免使用继承关系作为数据契约升级版本的方法。如果定义的是父类型参数而接收的是子类型,除非修改代码为预测到的子类型添加ServiceKnownType,否则子类型的序列化将会失败。
注意在上文契约中的特性:
- 数据表示
- 数据表示
- 数据表示
- 数据表示
- 数据表示
- 数据表示
- Struts+Hibernate数据表示
- Struts+Hibernate数据表示
- 数据的编码表示
- 数据的表示方法
- MALLET中的数据表示
- 数据的单位表示
- linux 编程-数据表示
- 计算机数据表示方法
- 数据表示与指令系统
- 数据的表示
- 数据表示方式
- BCD数据表示
- js限制文本框只能某种格式
- 看ExtJs API文档的阅读方法 收藏
- 17-嵌入式linux的多任务编程--0--多任务
- linux 下基于jrtplib库的实时传送实现
- 学习
- 数据表示
- M进制的数转换为N进制的数值
- js
- 仿QQ聊天室【方案】
- 避免CSRF漏洞
- 向量空间模型
- 关于Debug和Release之本质区别
- Birt透视图之解析
- 【关于面向连接的异步模式】