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”
}
浙公网安备 33010602011771号