private static string GetUserIPFromRequest(HttpContext httpContext, OperationContext operationContext) { if (operationContext != null) { // UserIPHeader int headerIndex = operationContext.IncomingMessageHeaders.FindHeader(XMS.Core.WCF.UserIPHeader.Name, XMS.Core.WCF.UserIPHeader.NameSpace); if (headerIndex >= 0) { // 传入请求中存在验证票据时,当前会员身份为验证票据指示的身份 return operationContext.IncomingMessageHeaders.GetHeader<string>(headerIndex); } return operationContext.IncomingMessageProperties.GetIP(); } if (httpContext != null) { System.Web.HttpRequest httpRequest = httpContext.TryGetRequest(); if (httpRequest != null) { return httpRequest.GetIP(); } } return "127.0.0.1"; }
/// <summary> /// 从请求中获取应用代理对象。 /// </summary> /// <returns></returns> internal static AppAgent GetFromRequest(HttpContext httpContext, OperationContext operationContext) { AppAgent agent = null; if (operationContext != null) { int headerIndex = operationContext.IncomingMessageHeaders.FindHeader(XMS.Core.WCF.AppAgentHeader.Name, XMS.Core.WCF.AppAgentHeader.NameSpace); if (headerIndex >= 0) { agent = Parse(operationContext.IncomingMessageHeaders.GetHeader<string>(headerIndex)); if (agent != null) { return agent; } } if (operationContext.IncomingMessageProperties.ContainsKey(HttpRequestMessageProperty.Name)) { HttpRequestMessageProperty requestMessageProperty = operationContext.IncomingMessageProperties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty; if (requestMessageProperty != null) { agent = Parse(requestMessageProperty.Headers.Get(XMS.Core.WCF.AppAgentHeader.Name)); if (agent != null) { return agent; } } } } if (httpContext != null) { System.Web.HttpRequest httpRequest = httpContext.TryGetRequest(); if (httpRequest != null) { // 从查询参数中获取代理并用完整模式解析 agent = Parse(httpRequest[XMS.Core.WCF.AppAgentHeader.Name]); if (agent == null) { // 从Asp.Net底层生成代理 agent = new AppAgent(false, null); agent.name = httpRequest.Browser.Browser; agent.version = httpRequest.Browser.Version; agent.platform = httpRequest.Browser.Platform; agent.isMobileDevice = httpRequest.Browser.IsMobileDevice; agent.mobileDeviceModel = httpRequest.Browser.MobileDeviceModel; agent.mobileDeviceManufacturer = httpRequest.Browser.MobileDeviceManufacturer; agent.mobileDeviceId = httpRequest["DeviceID"]; } return agent; } } if (agent == null) { return AppAgent.Empty; } return agent; }
/// <summary> /// 从请求中获取并生成ServiceInvokeChain调用链对象。 /// </summary> /// <returns></returns> internal static ServiceInvokeChain GetFromRequest(HttpContext httpContext, OperationContext operationContext) { List<ServiceInvokeChainNode> list = null; if (operationContext != null) { int headerIndex = operationContext.IncomingMessageHeaders.FindHeader(XMS.Core.WCF.InvokeChainHeader.name, XMS.Core.WCF.InvokeChainHeader.nameSpace); if (headerIndex >= 0) { list = Parse(operationContext.IncomingMessageHeaders.GetHeader<string>(headerIndex)); } if(list == null) { if (operationContext.IncomingMessageProperties.ContainsKey(HttpRequestMessageProperty.Name)) { HttpRequestMessageProperty requestMessageProperty = operationContext.IncomingMessageProperties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty; if (requestMessageProperty != null) { list = Parse(requestMessageProperty.Headers.Get(XMS.Core.WCF.InvokeChainHeader.name)); } } } if(list == null) { list = new List<ServiceInvokeChainNode>(); } if (operationContext.IncomingMessageHeaders != null) { if (list.Count == 0) { list.Add(ServiceInvokeChainNode.CreateHeader(operationContext.IncomingMessageProperties.GetIP())); } else { list[list.Count - 1].SetIP(operationContext.IncomingMessageProperties.GetIP()); } } // 将当前应用程序加入到调用链的尾部(如果调用链从当前应用开始,那么当前应用程序同时位于调用链的头部) list.Add(ServiceInvokeChainNode.CreateTail(RunContext.AppName, RunContext.AppVersion)); return new ServiceInvokeChain(list.ToArray()); } if (httpContext != null) { System.Web.HttpRequest httpRequest = httpContext.TryGetRequest(); if (httpRequest != null) { list = Parse(httpRequest[XMS.Core.WCF.InvokeChainHeader.name]); } if (list == null) { list = new List<ServiceInvokeChainNode>(); } if (httpRequest != null) { if (list.Count == 0) { list.Add(ServiceInvokeChainNode.CreateHeader(httpRequest.GetIP())); } else { list[list.Count - 1].SetIP(httpRequest.GetIP()); } } // 将当前应用程序加入到调用链的尾部(如果调用链从当前应用开始,那么当前应用程序同时位于调用链的头部) list.Add(ServiceInvokeChainNode.CreateTail(RunContext.AppName, RunContext.AppVersion)); return new ServiceInvokeChain(list.ToArray()); } return null; }