Chinaunix首页 | 论坛 | 博客
  • 博客访问: 155758
  • 博文数量: 43
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 360
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-06 16:25
文章分类

全部博文(43)

文章存档

2015年(1)

2014年(12)

2008年(1)

2006年(29)

我的朋友

分类: C#/.net

2014-07-10 15:55:14

WCF开发之消息契约(MessageContract)

http://www.cnblogs.com/CharlesLiu/archive/2010/02/08/1665989.html
对于SOAP来说主要由两部分构成Header和Body,他们两个共同构成了SOAP的信封,通常来说Body保存具体的数据内容,Header保存一些上下文信息或关键信息。比如:在一些情况下,具有这样的要求:当序列化一个对象并生成消息的时候,希望将部分数据成员作为SOAP的报头,部分作为消息的主体。比如说,我们有一个服务操作采用流的方式进行文件的上载,除了以流的方式传输以二进制表示的文件内容外,还需要传输一个额外的基于文件属性的信息,比如文件格式、文件大小等。一般的做法是将传输文件内容的流作为SOAP的主体,将其属性内容作为SOAP的报头进行传递。这样的功能,可以通过定义消息契约来实现。由此可见,MessageContract的主要作用就是给我们提供了自己来操作SOAP的一种方式。

? MessageContractAttribute
– 对控制消息头和消息体元素提供了强力支持
? 所支持的属性:
– MessageHeaderAttribute
– MessageBodyMemberAttribute
? 用于:
– 添加自定义头(custom headers)
– 控制消息是否被包装
– 控制签名与加密

[MessageContract]:

? 将一个类型转换为SOAP消息
– 类型可以包含消息头和消息体的元素
? 能够设置IsWrapped, ProtectionLevel
? 可以设置显式Name, Namespace

如下面的代码:

[MessageContract(IsWrapped=true, ProtectionLevel=ProtectionLevel.Sign)]
public class SaveLinkRequest
{…}
[MessageContract]
public class SaveLinkResponse
{…}

[MessageHeader]:

? 应用到消息契约的域(fields)或者(
properties)
– 为创建自定义头提供了简单的方法
? 能够提供Name, Namespace, ProtectionLevel
? 可以设置SOAP协议的设置:Relay, Actor,MustUnderstand

[MessageBody]:

? 应用到消息契约的域(fields)或者属性(
properties)
? 能够拥有多个body元素
– 等价于在操作中拥有多个参数
– 返回多个复杂类型数据的唯一方法
? 总是提供顺序(Order)
? 可以设置Name, Namespace, ProtectionLevel

代码
阅读(851) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~