diff --git a/src/Orchard/Environment/State/ContextState.cs b/src/Orchard/Environment/State/ContextState.cs index 70310d3f9..36c42d24e 100644 --- a/src/Orchard/Environment/State/ContextState.cs +++ b/src/Orchard/Environment/State/ContextState.cs @@ -1,12 +1,12 @@ -using System; +using System; +using System.Runtime.Remoting; using System.Runtime.Remoting.Messaging; using System.Web; -using Orchard.Mvc; +using Orchard.Mvc.Extensions; namespace Orchard.Environment.State { - /// - /// Holds some state for the current HttpContext or thread + /// Holds some state for the current HttpContext or Logical Context /// /// The type of data to store public class ContextState where T : class { @@ -23,12 +23,13 @@ namespace Orchard.Environment.State { } public T GetState() { - if (!HttpContextIsValid()) { - var data = CallContext.GetData(_name); + if (HttpContext.Current.IsBackgroundHttpContext()) { + var handle = CallContext.LogicalGetData(_name) as ObjectHandle; + var data = handle != null ? handle.Unwrap() : null; if (data == null) { if (_defaultValue != null) { - CallContext.SetData(_name, data = _defaultValue()); + CallContext.LogicalSetData(_name, new ObjectHandle(data = _defaultValue())); return data as T; } } @@ -41,20 +42,15 @@ namespace Orchard.Environment.State { } return HttpContext.Current.Items[_name] as T; - } public void SetState(T state) { - if (!HttpContextIsValid()) { - CallContext.SetData(_name, state); + if (HttpContext.Current.IsBackgroundHttpContext()) { + CallContext.LogicalSetData(_name, new ObjectHandle(state)); } else { HttpContext.Current.Items[_name] = state; } } - - private bool HttpContextIsValid() { - return HttpContext.Current != null && !HttpContext.Current.Items.Contains(MvcModule.IsBackgroundHttpContextKey); - } } -} \ No newline at end of file +}