通常定义消息的架构,使用数据协定就够了,但是有时必须将类型精确映射到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排序,但是基类不排在派生类之前。

在消息中,为了提升性能,建议每个消息中只包含一个标头和和正文,因为每个消息头和正文都是独立的进行序列化。

最新文章

  1. HttpApplication的处理管道处理过程简单描述
  2. CodeForces - 404A(模拟题)
  3. Tengine – Nginx衍生版
  4. Android 监控网络状态
  5. 《Pointers On C》读书笔记(第五章 操作符和表达式)
  6. MS Sql Server 消除重复行 保留信息完整的一条 2011-11-26 13:19(QQ空间)
  7. sublime Text 常用操作
  8. 简单总结下关于blob的图片上传
  9. Linux(CentOS6.5)下编译安装Nginx官方最新稳定版(nginx-1.10.0)
  10. js点击什么显示什么的内容,隐藏其它和进度条
  11. git配置全局用户名
  12. 解决Redis之MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist o...
  13. PHP 冒泡排序(Bubble Sort)
  14. C++11--时钟和计时器<chrono>
  15. cf-Global Round2-E. Pavel and Triangles
  16. GetFileOpenName()、GetFilesavename
  17. UCore-Lab1
  18. 【干货】YUM安装PHP 7版本后,增加phalcon框架的报错解决
  19. 使用gdb和gdbserver调试Android C/C++程序
  20. PAT甲级1066. Root of AVL Tree

热门文章

  1. Python-使用Magellan进行数据匹配总结
  2. 为什么实现Serializbale接口就能够进行序列化?
  3. awk使用记录
  4. 【ecshop---新增包邮卡功能】
  5. Elasticsearch教程(二),IK分词器安装
  6. Weblogic OutOfMemory exception的误解 -- thread limitation
  7. mongoDB 删除某一字段、重新名字段
  8. Linux网络编程中tcp_server和tcp_client函数的封装
  9. 【Excle】在重复数据中对日期排序并查询最新的一条记录
  10. 杂(三)-The type java.lang.Object cannot be resolved It is indirectly referenced ...