WCF基础之消息协定
通常定义消息的架构,使用数据协定就够了,但是有时必须将类型精确映射到soap消息,方法两种:1、插入自定义soap标头;2、另一种是定义消息的头和正文的安全属性。消息协定通过MessageContract,成员通过MessageHeader和MessageBodyMember来设定。
消息的操作最多具有一个参数和返回值,且参数和返回值都必须是消息类型。如:
[OperationContract] MessageContrctObject GetInfo(MessageContrctObject mco); [OperationContract] void SendInfo(MessageContrctObject mco); ...... //下面的是错误的 [OperationContract] int GetInfo(MessageContrctObject mco); [OperationContract] void SendInfo(MessageContrctObject mco1,MessageContrctObject mco2); ......
跟前面写过的协定一样,只要应用了MessageContract、MessageHeader和MessageBodyMember,类,方法,字段或属性等等都将忽略修饰,对客户端来讲都是public的。
对于数组的定义有两种:一是直接用MessageHeader,二是用MessageHeaderArray,如下是我写的一个简单的例子:
[MessageContract] public class UserMessageArray { [MessageHeaderArray] public string[] NameList; [MessageBodyMember] public string Remark; } [MessageContract] public class UserMessage { [MessageHeader] public string[] NameList; [MessageBodyMember] public string Remark;
他们的序列化不同之处在于包节点。
对消息加密和签名,是通过MessageHeader和MessageBodyMember的ProtectionLevel,其值为枚举:None,Sign,EncryptAndSign,这个先简单说到这儿,以后再做详细介绍。
控制是否包装soap的正文部分可以通过MessageContract的IsWrapped进行设置,soap的标头通过Actor/Role(1.1为Actor,1.2为Role)给标头添加统一资源标识符,通过MustUnderstand指示处理标头的节点是否必须劣迹该标头,Relay指定要将标头中继到下游节点。WCF不会对soap消息做任何处理(MustUnderstand除外)。消息的Body中也有Order排序,但是基类不排在派生类之前。
在消息中,为了提升性能,建议每个消息中只包含一个标头和和正文,因为每个消息头和正文都是独立的进行序列化。
最新文章
- HttpApplication的处理管道处理过程简单描述
- CodeForces - 404A(模拟题)
- Tengine – Nginx衍生版
- Android 监控网络状态
- 《Pointers On C》读书笔记(第五章 操作符和表达式)
- MS Sql Server 消除重复行 保留信息完整的一条 2011-11-26 13:19(QQ空间)
- sublime Text 常用操作
- 简单总结下关于blob的图片上传
- Linux(CentOS6.5)下编译安装Nginx官方最新稳定版(nginx-1.10.0)
- js点击什么显示什么的内容,隐藏其它和进度条
- git配置全局用户名
- 解决Redis之MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist o...
- PHP 冒泡排序(Bubble Sort)
- C++11--时钟和计时器<;chrono>;
- cf-Global Round2-E. Pavel and Triangles
- GetFileOpenName()、GetFilesavename
- UCore-Lab1
- 【干货】YUM安装PHP 7版本后,增加phalcon框架的报错解决
- 使用gdb和gdbserver调试Android C/C++程序
- PAT甲级1066. Root of AVL Tree
热门文章
- Python-使用Magellan进行数据匹配总结
- 为什么实现Serializbale接口就能够进行序列化?
- awk使用记录
- 【ecshop---新增包邮卡功能】
- Elasticsearch教程(二),IK分词器安装
- Weblogic OutOfMemory exception的误解 -- thread limitation
- mongoDB 删除某一字段、重新名字段
- Linux网络编程中tcp_server和tcp_client函数的封装
- 【Excle】在重复数据中对日期排序并查询最新的一条记录
- 杂(三)-The type java.lang.Object cannot be resolved It is indirectly referenced ...