3、消息报头与消息属性。

1)、MessageHeaderInfo:

  System.ServiceModel.Channel.MessageHeaderInfo是消息报头的基类,这个类包含Name、Namespace、Actor等只读属性:

  public abstract class MessageHeaderInfo

  {

    public abstract string Name{get;}

    public abstract string Namespace{get;}

    public abstract string Actor {get;}  --通过URI表示,表示消息报头针对的接收消息节点的角色。

    public abstract bool MustUnderstand{get;}

    public abstract bool Relay{get;}--表示消息报头是否是一个中继(Relayable)报头,中继报头主要针对消息中介而言的。如果匹配,并且MustUnderstand属性为false,则不需处理该报头直接转发。

    public abstract bool IsReferenceParameter{get;}

  }

2)、MessageHeader:

  MessageHeader继承自MessageHeaderInfo抽象类,MessageHeader类本身也也是抽象类,所以不能通过new方式来实例化,那么如何创建MessageHeader类呢,MessageHeader类通过一系列的CreateHeader重载方式来创建MessageHeader类,其中Name,Namespace和报头值是必须的参数,其他MessageHeader属性的值通过其他的CreateHeader重载方法指定。

3)、MessageHeader<T>:

  WCF还提供了泛型类T来指定报头值,如下:

  public class MessageHeader<T>

  {

    public MessageHeder();

    public MessageHeader(T content);

    public MessageHeder GetUntypedHeader(string name,string ns);//通过这个方法来实现MessageHeader<T> 和MessageHeader对象的转换。

    public T content {get;set;}

    public string Actor{get;set;}

    public bool MustUnderstand{get;set;}

    public bool Relay{get;set;} 

  }

4)、MessageHeaders:

  Message的Headers属性返回表示报头列表的MesssageHeaders类型,如下:

  public sealed class MessageHeaders:IEnumberable<MessageHeaderInfo>

  {

    public string Action{get;set;}

    public Uri To{get;set;}

    public EndpointAddress From {get;set;}

    public EndpointAddress ReplyTo{get;set;}

    public EndpointAddress FaultTo {get;set;}

    public UniqueId MessageId{get;set;}

    public UniqueId RelatesTo{get;set;}

    public MessageVersion MessageVersion{get;set;}

    public UnderstoodHeaders UnderstoodHeaders{get;set;}

  }

  上面定义的属性正好和WS-Addressing定义的7个属性相匹配,消息正好通过这7个属性完成寻址方式。

5)、消息属性:

  消息属性仅仅是附加在Message对象上的一组对象,不作为SOAP消息的一部分,并且附加的属性一般仅限于本地使用,比如把某些状态信息附加到消息上供本地信道栈的信道使用。

  消息具有的属性,通过只读属性Properties表示,在WCF中除了供本地使用的消息属性外,还有两个重要的消息属性,是针对HTTP请求消息和回复消息的控制,这两个属性类型为:HttpRequestMessageProperty和HttpResponseMessageProperty,定义在System.ServiceModel命名空间下,可以通过这两个属性,可以对请求消息和回复消息进行定制,如添加查询字符串和Http报头(比如cookie)等。

  pubic sealed class HttpRequestMessageProperty

  {

    public WebHeaderCollection Header{get;}

    public string Method {get;set;}

    pulic string QueryString{get;set;}---查询字符串,默认返回为空,

    public bool SuppressEntityBody{get;set;}---表示是否忽略HTTP请求消息主体,而只发送其消息报头部分。

    public static string Name {get;}---表示在消息属性集合中的名称,其值为:“httpRequest”

  }

 

posted on 2013-08-13 21:25  Kelly_HanShuai  阅读(172)  评论(0)    收藏  举报