WCF 关于自定义MessageHeader支持

分类: asp.net技巧   出处:iocblog整理  更新时间:2008-06-06   添加到收藏  
 我们在项目中有些公共信息可以不通过方法参数提供,将这些信息封装到messageheader,通过客户端提交给server。这种情况下我们需要注意wcf不同的实例模式、会话模式对header的支持情况:
  
  实力模式(instancecontextmode)percall、persession支持header,但是single不支持自定义header,表现是服务器无法获取header内容
   (来源 www.iocblog.net)
  另外如果在servicecontract中启用会话模式(sessionmode)声明,那么sessionmode.noallowed、sessionmode.allowed两种模式下是可以接收到header的,但是sessionmode.required模式无法接收header,给我的感觉是session跟messageheader有冲突。
  
  建议:instancecontextmode采用percall,而sessionmode采用noallowed;如果我们不做显示声明instancecontextmode默认采用persession,而sessionmode采用allowed
  
  在percall、persession、single三种模式中,percall是性能最高的,节省资源,支持系统的可伸缩性。由于服务实例的生命周期只存在于一次调用期间,特别对于那些持有昂贵资源的服务实例而言,这种方式可以有效地提高系统性能。销毁服务实例时,wcf不会断开与客户端的连接。
Tag: wcf