• WCF自动添加消息头


    客户端自定义消息查看器实现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;
    }
    
  • 相关阅读:
    如何规范.net中的js开发(2)
    网站架构之缓存应用(2)
    基于插件式开发的软件项目
    基于NHibernate的UnitOfWork+Repository模式(AutoFac)
    基于NHibernate的UnitOfWork+Repository模式(AutoFac)–P1
    云计算从基础到应用架构系列虚拟化的技术(上)
    Razor试图引擎 语法学习(一)
    ASP.NET页面的字符编码设置
    资源1
    Razor试图引擎 语法学习(二)
  • 原文地址:https://www.cnblogs.com/wander1128/p/4566430.html
Copyright © 2020-2023  润新知