/// <summary> /// Captures the current thread context /// </summary> /// <returns></returns> public static CallerThreadContext Capture( bool captureCallContext, bool captureHttpContext) { Debug.Assert(captureCallContext || captureHttpContext); CallerThreadContext callerThreadContext = new CallerThreadContext(); // TODO: In NET 2.0, redo using the new feature of ExecutionContext class - Capture() // Capture Call Context if (captureCallContext && (getLogicalCallContextMethodInfo != null)) { callerThreadContext._callContext = (LogicalCallContext)getLogicalCallContextMethodInfo.Invoke(Thread.CurrentThread, null); if (callerThreadContext._callContext != null) { callerThreadContext._callContext = (LogicalCallContext)callerThreadContext._callContext.Clone(); } } // Capture httpContext if (captureHttpContext && (null != HttpContext.Current)) { callerThreadContext._httpContext = HttpContext.Current; } return(callerThreadContext); }
/// <summary> /// Applies the thread context stored earlier /// </summary> /// <param name="callerThreadContext"></param> public static void Apply(CallerThreadContext callerThreadContext) { if (null == callerThreadContext) { throw new ArgumentNullException("callerThreadContext"); } // Todo: In NET 2.0, redo using the new feature of ExecutionContext class - Run() // Restore call context if ((callerThreadContext._callContext != null) && (setLogicalCallContextMethodInfo != null)) { setLogicalCallContextMethodInfo.Invoke(Thread.CurrentThread, new object[] { callerThreadContext._callContext }); } // Restore HttpContext if (callerThreadContext._httpContext != null) { CallContext.SetData(HttpContextSlotName, callerThreadContext._httpContext); } }
/// <summary> /// Captures the current thread context /// </summary> /// <returns></returns> public static CallerThreadContext Capture( bool captureCallContext, bool captureHttpContext) { Debug.Assert(captureCallContext || captureHttpContext); CallerThreadContext callerThreadContext = new CallerThreadContext(); // TODO: In NET 2.0, redo using the new feature of ExecutionContext class - Capture() // Capture Call Context if (captureCallContext && (getLogicalCallContextMethodInfo != null)) { callerThreadContext._callContext = (LogicalCallContext)getLogicalCallContextMethodInfo.Invoke(Thread.CurrentThread, null); if (callerThreadContext._callContext != null) { callerThreadContext._callContext = (LogicalCallContext)callerThreadContext._callContext.Clone(); } } // Capture httpContext if (captureHttpContext && (null != HttpContext.Current)) { callerThreadContext._httpContext = HttpContext.Current; } return callerThreadContext; }