编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

WCF 消息头传输与传递(消息传递接口)

wxchong 2024-09-02 03:53:14 开源技术 7 ℃ 0 评论

消息头传输的重要性我们不用多说,我们直接 上代码。这里只是一个小小的代码例子。

客户端代码:

 public static T CreateServiceByUrl<T>(string serviceName, WCFBindingEnum bing,string host,int port)
        {
            try
            {
                if (string.IsNullOrEmpty(serviceName)) throw new NotSupportedException("This url is not Null or Empty!");
                string url = #34;http://{host}:{port}/{serviceName}";

                AddressHeader Client_UserId = AddressHeader.CreateAddressHeader("UserInfo", "http://www.xxx.com/", SystemInfo.UserInfo == null ? "" : JsonUtil.ObjectToJSON(SystemInfo.UserInfo));
                AddressHeader Client_Date = AddressHeader.CreateAddressHeader("ClientDate", "http://www.xxx.com/", DateTime.Now);
                AddressHeader Client_MachineName = AddressHeader.CreateAddressHeader("ClientMachineName", "http://www.xxx.com/", System.Environment.MachineName);
                AddressHeader Client_ProcessID = AddressHeader.CreateAddressHeader("ClientProcessID", "http://www.xxx.com/", Process.GetCurrentProcess().Id.ToString());
                AddressHeader Client_ProcessName = AddressHeader.CreateAddressHeader("ClientProcessName", "http://www.xxx.com/", Process.GetCurrentProcess().ProcessName);



                EndpointAddress address = new EndpointAddress(new Uri(url), Client_UserId, Client_MachineName, Client_ProcessID, Client_Date, Client_ProcessName);
                
                Binding binding = CreateBinding(bing);
                ChannelFactory<T> factory = new ChannelFactory<T>(binding, address);
                return factory.CreateChannel();
            }
            catch (Exception ex)
            {
                throw new Exception("创建服务工厂出现异常.");
            }
        }

服务器端获取消息头信息

public static class WCFRequestHeaderServiceUntil
    {
        public static T  GetContent<T>(string headerName)
        {
            int index = OperationContext.Current.IncomingMessageHeaders.FindHeader(headerName, "http://www.xxx.com/");
            if (index != -1)
            {
                return  OperationContext.Current.IncomingMessageHeaders.GetHeader<T>(index);
            }
            return default(T);
        }

        /// <summary>
        /// 获取客户端-客户信息
        /// </summary>
        /// <returns></returns>
        public static UserInfo GetClientUserInfo()
        {
            string value = GetContent<string>("UserInfo");
            if (string.IsNullOrEmpty(value) == true)
            {
                return null;
            }
            return JsonUtil.JSONToObject<UserInfo>(value);
        }

        /// <summary>
        /// 获取客户端-请求日期
        /// </summary>
        /// <returns></returns>
        public static DateTime GetClientDate()
        {
            return GetContent<DateTime>("ClientDate");
        }

        /// <summary>
        /// 获取客户端-电脑名称
        /// </summary>
        /// <returns></returns>
        public static string GetClientMachineName()
        {
            return GetContent<string>("ClientMachineName");
        }

        /// <summary>
        /// 获取客户端-进程ID
        /// </summary>
        /// <returns></returns>
        public static string GetClientProcessID()
        {
            return GetContent<string>("ClientProcessID");
        }
        /// <summary>
        /// 获取客户端-进程名称
        /// </summary>
        /// <returns></returns>
        public static string GetClientProcessName()
        {
            return GetContent<string>("ClientProcessName");
        }
    }

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表