客户端自定义消息查看器实现IClientMessageInspector接口在消息发送之前添加消息头

class ClientMessageInspector : System.ServiceModel.Dispatcher.IClientMessageInspector, System.ServiceModel.Description.IEndpointBehavior
{
public Dictionary<string, string> HeaderValue { get; set; } #region Implementation for IClientMessageInspector
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState) { } public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
if (HeaderValue != null)
{
foreach (var v in HeaderValue)
{
request.Headers.Add(System.ServiceModel.Channels.MessageHeader.CreateHeader(v.Key, "client", v.Value));
}
} return null;
}
#endregion #region Implementation for IEndpointBehavior
public void AddBindingParameters(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters) { } public void ApplyClientBehavior(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, ClientRuntime behavior)
{
//此处为Extension附加到ClientRuntime。
behavior.MessageInspectors.Add(this);
} public void ApplyDispatchBehavior(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, EndpointDispatcher endpointDispatcher)
{
//如果是扩展服务器端的MessageInspector,则要附加到EndpointDispacther上了。
//endpointDispatcher.DispatchRuntime.MessageInspectors.Add(this);
} public void Validate(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint) { }
#endregion
}
//添加消息头
client.ChannelFactory.Endpoint.Behaviors.Add(new ClientMessageInspector()
{
HeaderValue = new Dictionary<string, string>() {
{"OrganID", GetAppSetting("OrganID")},
{"HandshakeCode", GetAppSetting("HandshakeCode")}
}
});

服务器端获取消息头

private string GetHeaderValue(string name)
{
var headers = OperationContext.Current.IncomingMessageHeaders;
var index = headers.FindHeader(name, "client");
if (index > -1)
{
return headers.GetHeader<string>(index);
} return string.Empty;
}

WCF自动添加消息头的更多相关文章

  1. PHP自动添加http://头 转换网址为链接

    有时候,当我们需要用户输入网址的时候,一般我们会让用户省略掉"http://",当提交完成后用代码自动再加上http://,若有需要,我们 还可将网址转换成链接的形式,类似于众多网 ...

  2. springboot集成swagger添加消息头(header请求头信息)

    springboot集成swagger上篇文章介绍: https://blog.csdn.net/qiaorui_/article/details/80435488 添加头信息: package co ...

  3. PHP 下载文件时自动添加bom头的方法

    首先弄清楚,什么是bom头?在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order ...

  4. 火狐添加消息头 Modify Header Value (HTTP Headers)

    火狐浏览器添加组件 : Modify Header Value (HTTP Headers)

  5. Prism for WPF 搭建一个简单的模块化开发框架(四)异步调用WCF服务、WCF消息头添加安全验证Token

    原文:Prism for WPF 搭建一个简单的模块化开发框架(四)异步调用WCF服务.WCF消息头添加安全验证Token 为什么选择wcf?   因为好像wcf和wpf就是哥俩,,, 为什么选择异步 ...

  6. Unity VS 创建脚本自动添加头注释-时间-描述-作者等信息

    Unity生成脚本自动添加头注释 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心 ...

  7. 去除partner页面消息 自动添加关注者的功能

    某些公司希望在partner页面说些partner的坏话,可是odoo居然自动添加了partner关注,这就尴尬了.... 如果恰搭建了邮件服务器,很有可能就自动发到了客户邮箱里,等着炸锅吧.... ...

  8. 【WCF】自定义地址头的筛选器

    前面的文章中,老周已向大伙伴们介绍了如何在终结点上使用地址头,只要服务是沿着该终结点调用的,那么每一次调用都会自动把地址头插入到SOAP消息的Header列表中. 而通过前一篇文章中的示例,大家也看到 ...

  9. JMS消息头

    一个消息对象分为三部分:消息头(Headers),属性(Properties)和消息体(Payload).对于StreamMessage和MapMessage,消息本身就有特定的结构,而对于TextM ...

随机推荐

  1. linux回退到上次访问目录

    cd / cd ..  回到上级目录 cd - 回到上次访问目录

  2. ASP.NET MVC RenderPartial和Partial的区别

    背景:ASP.NET MVC 4.0 @{ Html.RenderPartial(...); } public static void RenderPartial(this HtmlHelper ht ...

  3. 常用jQuery代码

    返回元素的html包括它本身 <div class="test"><p>hello,你好!</p></div> <script ...

  4. Python AES - base64 加解密

    首先python引用AES加密 from Crypto.Cipher import AES 需要先安装  Crypto  模块, 可以使用 easy_install 进行安装   会自动去官网进行搜索 ...

  5. Sublime Text 2下搭建Python环境常见错误

    Sublime Text 2下搭建Python环境时,最容易出的错误就是Python环境配置错误,导致build(Ctrl+B)后没有任何反应. 关于Python编程环境的配置,网上很容易搜索到.先默 ...

  6. Android 自动安装脚本

    建立一个install.bat,写入下面 adb install -r %1PAUSE 把apk拖拽到install.bat上

  7. Cnblogs自定义皮肤css样式-星空观测者

    不知不觉来Cnblogs也这么久了,然而Blogs提供的主题还是依旧那么复古,总觉得阅读起来难免枯燥,虽然我认为做技术不可以太过浮躁,但是一个美观的主题终究是吸引人眼的第一要素. 毕竟这么久了,在博客 ...

  8. Application package 'AndroidManifest.xml' must have a minimum of 2 segments.

    看了源码就是packagename里面必须包含一个. 源码在: ./sdk/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/id ...

  9. Express的搭建--nodejs的学习

    1,需要的学习环境 Node.js: 0.10.32 Express: 4.10.2 MongoDB: 2.6.1 2,安装Express $ npm install -g express-gener ...

  10. ModelMapper 中高级使用 java

    ModelMapper 是一个java对象自动映射的第三方架包,用起来很方便,配合阿里的frstjson可以极大简化后台代码. 但是ModelMapper 中文使用说明很少,官网http://mode ...