Thanks for the feedback Brian. -- Roelof.
On Thu, Jun 24, 2010 at 6:48 PM, bluesliverx <[email protected]> wrote: > For anyone who runs into the same problem, I finally found that the > HttpContext variable within the controller EndAsyncTest() method was > being set correctly, but HttpContext.Current was null for some reason. > By putting "HttpContext.Current = HttpContext;" in the EndAsyncTest() > method at any point, the scope was able to be successfully disposed of > using my own OnEndRequest method or the SessionScopeWebModule: > > public void EndAsyncTest() { > HttpContext.Current = HttpContext; > Flash["message"] = > asynctestTask.EndInvoke(ControllerContext.Async.Result); > RedirectToAction("index"); > } > > Thanks, > Brian > > On Jun 23, 1:40 pm, bluesliverx <[email protected]> wrote: > > After some more digging, I've tracked the problem down to the fact > > that HttpContext.Current is null. Somehow, Context (in the > > OnEndRequest method in my global application) is still non-null, but > > if I attempt to remove the scope from there, it tells me that it is > > not the currently registered scope. This works fine when compiling in > > VS2010, but not under mono in Windows or Linux. As I'm not an expert > > in ASP.NET and Mono, I'm at a standstill with async methods until I > > can figure this out. > > > > Perhaps I could ask everyone a different question: I can merely check > > to see if HttpContext.Current is null and then skip disposing of the > > scope if it is. Will this leave open connections to the database or > > have performance or other implications if I don't dispose of the > > correct scope? > > > > Thanks for your help, > > Brian > > > > On Jun 14, 4:04 pm, bluesliverx <[email protected]> wrote: > > > > > > > > > Hello all, > > > > > No matter what I try, I can't seem to get the hybrid web scope working > > > with an asynchronous action when using Mono (tested on 2.6.1, 2.6.3, > > > and 2.6.4). Each time I get a NullRefEx in either the OnEndRequest > > > method or the SessionScopeWebModule. Here is the stacktrace running > > > locally on a windows machine using XSP2: > > > > > System.NullReferenceException: Object reference not set to an instance > > > of an object > > > at [MyApp].Global.OnEndRequest (System.Object sender, > > > System.EventArgs e) [0x00000] in <filename unknown>:0 > > > at (wrapper delegate-invoke) > > > System.EventHandler:invoke_void__this___object_EventArgs > > > (object,System.EventArgs) > > > at (wrapper delegate-invoke) > > > System.EventHandler:invoke_void__this___object_EventArgs > > > (object,System.EventArgs) > > > at (wrapper delegate-invoke) > > > System.EventHandler:invoke_void__this___object_EventArgs > > > (object,System.EventArgs) > > > at System.Web.HttpApplication.PipelineDone () [0x0001c] in C:\cygwin > > > \tmp\monobuild\build\BUILD\mono-2.6.4\mcs\class\System.Web\System.Web > > > \HttpApplication.cs:1106 > > > > > Here is the same stack trace using mod_mono on Ubuntu, notice on this > > > one I was using the SessionScopeWebModule: > > > > > System.NullReferenceException: Object reference not set to an instance > > > of an object > > > at Castle.ActiveRecord.Framework.SessionScopeWebModule.OnEndRequest > > > (System.Object sender, System.EventArgs e) [0x00000] in <filename > > > unknown>:0 > > > at (wrapper delegate-invoke) > > > System.EventHandler:invoke_void__this___object_EventArgs > > > (object,System.EventArgs) > > > at System.Web.HttpApplication.PipelineDone () [0x00000] in <filename > > > unknown>:0 > > > > > I tried both methods (writing my own OnBegin/OnEndRequest methods and > > > SessionScopeWebModule) since I thought it may at first have been the > > > module causing the problem. > > > > > The asynchronous action is a simple example: > > > > > public class TasksController : ARSmartDispatchController { > > > public TasksController() > > > : base() { > > > asynctestTask = AsyncTestTaskRun; > > > } > > > private delegate string AsyncTestTask(); > > > private readonly AsyncTestTask asynctestTask; > > > private string AsyncTestTaskRun() { > > > System.Threading.Thread.Sleep(250); > > > return "Async Test Finished Successfully"; > > > } > > > > > public IAsyncResult BeginAsyncTest() { > > > return > asynctestTask.BeginInvoke(ControllerContext.Async.Callback, > > > ControllerContext.Async.State); > > > } > > > > > public void EndAsyncTest() { > > > Flash["message"] = > > > asynctestTask.EndInvoke(ControllerContext.Async.Result); > > > RedirectToAction("index"); > > > } > > > } > > > > > Any ideas on this one? I've tried many things to get this working, > > > and I do have the HybridWebThreadScopeInfo configured on my > > > activerecord: > > > <activerecord isWeb="true" > > > > threadinfotype="Castle.ActiveRecord.Framework.Scopes.HybridWebThreadScopeIn > fo, > > > Castle.ActiveRecord"> > > > .... > > > </activerecord> > > > > > Thanks! > > > -Brian > > -- > You received this message because you are subscribed to the Google Groups > "Castle Project Users" group. > To post to this group, send email to [email protected] > . > To unsubscribe from this group, send email to > [email protected]<castle-project-users%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/castle-project-users?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en.
