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

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

WCF基础之消息协定的更多相关文章

  1. WCF基础之数据协定

    数据协定最重要的当然就是DataContract和DataMember.这两个特性能应用到类.结构和枚举.这个两个特性跟服务契约的特点是一样的,只有被DataContract标记的类和类中被标记Dat ...

  2. WCF初探-19:WCF消息协定

    WCF消息协定概述 在生成 WCF应用程序时,开发人员通常会密切关注数据结构和序列化问题,而不必关心携带数据的消息结构. 对于这些应用程序,为参数或返回值创建数据协定的过程很简单.但是,有时完全控制 ...

  3. WCF学习心得------(七)消息协定

    第七章 消息协定 7.1 消息协定概述 通常情况下,在定义消息的架构时只使用数据协定就足够,但是有时需要精确控制如何将类型映射到通过网络传输的SOAP消息.对于这种情况,通常解决方案是插入自定义的SO ...

  4. 传说中的WCF(8):玩转消息协定

    Message翻译成中文,相信各位不陌生,是啊,就是消息,在WCF中也有消息这玩意儿,不知道你怎么去理解它.反正俺的理解,就像我们互发短信一个道理,通讯的双方就是服务器与客户端,说白了吧,就是二者之间 ...

  5. 我们一起学习WCF 第五篇数据协定和消息协定

    A:数据协定(“数据协定”是在服务与客户端之间达成的正式协议,用于以抽象方式描述要交换的数据. 也就是说,为了进行通信,客户端和服务不必共享相同的类型,而只需共享相同的数据协定. 数据协定为每个参数或 ...

  6. WCF基础

    初入职场,开始接触C#,开始接触WCF,那么从头开始学习吧,边学边补充. SOA Service-Oriented Architecture,面向服务架构,粗粒度.开放式.松耦合的服务结构,将应用程序 ...

  7. [老老实实学WCF] 第九篇 消息通信模式(上) 请求应答与单向

    老老实实学WCF 第九篇 消息通信模式(上) 请求应答与单向 通过前两篇的学习,我们了解了服务模型的一些特性如会话和实例化,今天我们来进一步学习服务模型的另一个重要特性:消息通信模式. WCF的服务端 ...

  8. WCF学习笔记——WCF基础

    一 WCF与SOA SOA是一种通过为所有软件提供服务外观,并将这些服务的WSDL集中发布到一个地方的一种组织企业软件的方法.它通过使用明确定义的接口通过跨越边界传递消息来让多个自治的服务协同工作.S ...

  9. 【.net 深呼吸】记录WCF的通信消息

    前面老周给大伙伴们介绍了把跟踪信息写入日志文件的方法,今天咱们换个类似的话题来扯一下,对了,咱们就说说怎么把WCF的往来消息log下来吧. 尽管在现实生活中,我们不主张偷窥他人信息,不过,偷窥程序信息 ...

随机推荐

  1. 【Hadoop】Hadoop mr wordcount基础

    1.基本概念 2.Mapper package com.ares.hadoop.mr.wordcount; import java.io.IOException; import java.util.S ...

  2. 【重点突破】—— React实现富文本编辑器

    前言:富文本编辑器Rich Text Editor, 简称 RTE, 是一种可内嵌于浏览器,所见即所得的文本编辑器.   一.安装插件 react-draft-wysiwyg: 文本编辑器插件 dra ...

  3. Shader toy (顺手写两个Gyro)(纯代码写3D)

    Shader toy (A new world) 1.一个多月了,突然忘记CSDN的password了.由于每次输password的时候都要计算一遍,于是没有计算出来- 2.回头发现都过了半年了,都快 ...

  4. Mysql性能测试诊断

    mysql> showglobal status; 可以列出mysql服务器运行各种状态值,另外,查询mysql服务器配置信息语句: mysql> showvariables; 一.慢查询 ...

  5. vue 的 起手式

    代码: vue.js // vue 起手势 (function(root,factory) { root.Vue = factory(); })(this,function(){ // 设置基础的默认 ...

  6. DNS主从服务器

    一.目的: 我们知道,DNS服务器在网络服务中可能出现故障当机等状况,会导致DNS服务瘫痪,显然在实际的网络应用中我们不希望出现这种状况,所有我们就要配置从 服务器来在主DNS服务器出现故障时代替他来 ...

  7. HTML5实战与剖析之媒体元素(6、视频实例)

    HTML5中的视频标签和及其模仿视频播放器的效果在一些手机端应用比較多.由于手机端基本上废除了flash的独断.让HTML5当家做主人,所以对视频支持的比較好. 所以今天专门为大家奉上HTML5视频标 ...

  8. hdu 2871 Memory Control(线段树)

    题目链接:hdu 2871 Memory Control 题目大意:模拟一个内存分配机制. Reset:重置,释放全部空间 New x:申请内存为x的空间,输出左地址 Free x:释放地址x所在的内 ...

  9. java调用本地默认浏览器

    1 http://blog.csdn.net/casularm/article/details/3401018 2

  10. Hadoop 中的 ArrayWritable

    虽然ArrayWritable不是接口,但貌似必须要子类去extends ArrayWritable,不能直接用ArrayWriable 否则会报下面的错误?(不是很确定) java.lang.Exc ...