详解MustUnderstand属性

MessageHeaderInfo类中有一个 MustUnderstand属性,按照MSDN的解释,该属性指示消息的接收者必须理解此messageheader,如果不能理解此消息头,就会抛出ProtocolException,消息就不会被继续处理下去。

那么消息头如何算是能被理解的呢?主要取决于MessageHeaders.UnderstoodHeaders属性,该属性表明了当前消息中可以被理解的messageheader,如果消息中有一个消息头不在UnderstoodHeaders中,那么就会抛出上面提到的ProtocolException

那么UnderstoodHeader里面的有哪些可被理解的messageheader又是被谁控制的呢?这是通过绑定来控制的,如果你的绑定支持ws-addressing协议,那么UnderstoodHeaders集合中就会有To元素,表示To这个messageheader已经被理解了。

什么时候我们会关心这个问题?当我们自己写路由服务的时候,问题就出现了,例如:客户端和服务端都需要支持ReliableSession的时候,设置如下:

NetTcpBinding binding = new NetTcpBinding();

binding.ReliableSession.Enabled = true;

但是路由服务不能支持ReliableSession,因为ReliableSession是端对端的,路由服务是不需要理解消息里面的关于ReliableSessionmessageheader的。所以路由服务中的ReliableSession必须是关闭的,否则就等于在客户端和路由服务之间建立ReliableSession了。路由服务关闭了ReliableSession,但是客户端发送的消息中有很多关于ReliableSessionmessageheader是必须要被理解的,但是路由服务的UnderstoodHeaders集合中又不包含这些messageheader,所以必须要通过如下方式来使路由服务不需要理解这些必须被理解的messageheader,这样就可以让路由服务继续处理消息。设置方式如下:

host.Description.Endpoints[0].Behaviors.Add(newMustUnderstandBehavior(false));

hostServiceHost的实例。当然可以使用配置文件来设置这个行为。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MacUpdater可以自动跟踪Mac上安装的所有应用程序的最新更新。启动我们的MacUpdater,一目了然地查看您的哪些应用程序已过期。只需单击一下,您就可以更新任何过时的应用程序。不要再浪费时间手动搜索更新,下载,安装和清理。让MacUpdater为您处理一切! 扫描扫描您的应用程序-维护概述 没有什么比使用MacUpdater找出哪些应用程序已过时容易的了。只需启动它,然后让它扫描您的应用即可。您会看到所有应用程序的列表,带有更新的应用程序以红色列出。有过滤器选项可显示仅过时的应用程序或忽略更新的应用程序。MacUpdater数据库包含有关超过40.000个应用程序的最新版本的信息(请参阅FAQ)。 隐私无需注册-完全隐私 与竞争服务相比,您无需注册即可使用MacUpdater。只需启动它,扫描并更新您的应用即可。更重要的是,MacUpdater中的所有内容在设计时都考虑了您的隐私。我们不会追踪您,也不会出售您的数据-因为我们甚至没有它。实际上,我们拥有行业领先的隐私政策,可以使您感到温暖而舒适。 安全保持最新-保持安全 更新应用程序再简单不过了-只需单击任何过时的应用程序旁边的“更新”按钮,MacUpdater就会自动将其更新为当前版本。MacUpdater可以在后台静默运行,每天检查您的应用程序是否有更新,并通过通知让您了解新的更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值